using UnityEngine; using UnityEngine.EventSystems; namespace XED.UI { public class UI_WindowDrag : UnityEngine.MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler, IPointerDownHandler { Canvas canvas; Vector3 originalPos; Vector3 dragOffset; // Start is called before the first frame update void Awake() { canvas = GetComponentInParent(); } public void OnBeginDrag(PointerEventData eventData) { originalPos = transform.localPosition; RectTransformUtility.ScreenPointToWorldPointInRectangle( canvas.transform as RectTransform, eventData.position, eventData.pressEventCamera, out var worldMousePos ); dragOffset = transform.position - worldMousePos; } public void OnDrag(PointerEventData eventData) { if (canvas == null) return; RectTransformUtility.ScreenPointToWorldPointInRectangle( canvas.transform as RectTransform, eventData.position, eventData.pressEventCamera, out var worldMousePos ); transform.position = worldMousePos + dragOffset; } public void OnEndDrag(PointerEventData eventData) { } public void OnPointerDown(PointerEventData eventData) { transform.SetAsLastSibling(); } } }