Files
Studio/Assets/Scripts/XED/UI/Elements/UI_WindowDrag.cs
2025-02-24 09:26:27 +09:00

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();
}
}
}