using System;
using UnityEngine;
using UnityEngine.EventSystems; // 引入UI命名空间
public class UIFollowMouse : MonoBehaviour,IBeginDragHandler, IDragHandler,IEndDragHandler
{
/// <summary>
/// 标识
/// </summary>
public int mId;
private RectTransform rectTransform;
private RectTransform area;//canvas区域范围
private void Start()
{
rectTransform = GetComponent<RectTransform>();
area = GetComponentInParent<Canvas>().GetComponent<RectTransform>();
}
private Vector2 _offset;
public void OnBeginDrag(PointerEventData eventData)
{
if (rectTransform == null || area == null )
return;
// 将鼠标的屏幕位置转换为UI元素的世界位置
Vector2 localPointerPosition;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(area, eventData.position, eventData.enterEventCamera, out localPointerPosition))
{
// 设置UI元素的位置以跟随鼠标
_offset = rectTransform.anchoredPosition - localPointerPosition;
}
}
public void OnDrag(PointerEventData eventData)
{
if (rectTransform == null || area == null)
return;
Vector2 localPointerPosition;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(area, eventData.position, eventData.enterEventCamera, out localPointerPosition))
{
// 设置UI元素的位置以跟随鼠标
//_offset = rectTransform.position - localPointerPosition;
rectTransform.anchoredPosition = localPointerPosition + _offset;
}
}
public Action<int, Vector2> mEndDragCallBack;
public void OnEndDrag(PointerEventData eventData)
{
mEndDragCallBack?.Invoke(mId, rectTransform.anchoredPosition);
}
}