49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
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<Canvas>();
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|