private void Update()
        {
            if (_mouseDown)
            {
                // Check for drag release
                if (Input.GetMouseButtonUp(0))
                {
                    // Touch ended; cancel tracking
                    _mouseDown    = false;
                    _lastPosition = Vector3.zero;
                    if (DragEnded != null)
                    {
                        DragEnded.Invoke(Input.mousePosition);
                    }
                }
                else if (_lastPosition != Input.mousePosition)
                {
                    // Touch still occuring and moved
                    if (DragMoved != null)
                    {
                        DragMoved.Invoke(_lastPosition - Input.mousePosition);
                    }

                    _lastPosition = Input.mousePosition;
                }
            }
            else if (Input.GetMouseButtonDown(0))
            {
                // Otherwise, start tracking the first touch to begin
                _lastPosition = Input.mousePosition;
                _mouseDown    = true;

                if (DragBegan != null)
                {
                    DragBegan.Invoke(_lastPosition);
                }
            }
        }
 public void OnBeginDrag(PointerEventData eventData)
 {
     DragBegan?.Invoke(eventData, gameObject);
 }