using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace BrewMonster.Scripts.Managers { /// /// Forwards pointer drag events from the GameObject to the nearest parent ScrollRect. /// Attach to UI elements (Buttons) that should allow ScrollRect dragging while still receiving clicks. /// public sealed class ForwardDragToScrollRect : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { private ScrollRect _target; public ScrollRect Target { get { if (_target == null) _target = GetComponentInParent(); return _target; } set => _target = value; } public void OnBeginDrag(PointerEventData eventData) { var t = Target; if (t != null) ExecuteEvents.Execute(t.gameObject, eventData, ExecuteEvents.beginDragHandler); } public void OnDrag(PointerEventData eventData) { var t = Target; if (t != null) ExecuteEvents.Execute(t.gameObject, eventData, ExecuteEvents.dragHandler); } public void OnEndDrag(PointerEventData eventData) { var t = Target; if (t != null) ExecuteEvents.Execute(t.gameObject, eventData, ExecuteEvents.endDragHandler); } } }