void OnLongClick() { EnterState_AfterLongClickDragAccepted_WaitingToBeginDrag(); var evSystem = GetOrFindEventSystem(); if (!evSystem) { EnterState_WaitingForPress(); return; } var canvas = GetComponentInParent <Canvas>(); var raycaster = canvas.GetComponentInParent <GraphicRaycaster>(); var raycastResults = new List <RaycastResult>(); var pev = new PointerEventData(evSystem); pev.position = _CurrentPressEventWorldPosition; raycaster.Raycast(pev, raycastResults); bool foundThis = false; foreach (var res in raycastResults) { if (res.gameObject == gameObject) { foundThis = true; break; } } // Happens if the object is moved externally while the pointer remains still if (!foundThis) { EnterState_AfterLongClickDragDeclined_WaitingToBeginDrag(); return; } _Canvas = canvas; _CanvasRT = _Canvas.transform as RectTransform; _GraphicRaycaster = raycaster; var pos = RT.position; RT.SetParent(_CanvasRT, false); RT.position = pos; // preserving the pos SetVisualMode(VisualMode.OVER_OWNER_OR_OUTSIDE); if (dragDropListener != null && !dragDropListener.OnPrepareToDragItem(this)) { EnterState_AfterLongClickDragDeclined_WaitingToBeginDrag(); } }