using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// UI拖拽
/// </summary>
public class DragUI : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
/// <summary>
/// 拖拽对象
/// </summary>
public Transform _Target;//可拖拽区域
/// <summary>
/// 拖拽对象RectTransform
/// </summary>
public RectTransform _TargetRect;//整个窗口
private bool isDrag;
private Vector3 offset;
public void OnBeginDrag(PointerEventData eventData)
{
isDrag = false;
SetDragObjPostion(eventData);
_TargetRect.transform.SetSiblingIndex(1);
}
public void OnDrag(PointerEventData eventData)
{
isDrag = true;
SetDragObjPostion(eventData);
}
public void OnEndDrag(PointerEventData eventData)
{
SetDragObjPostion(eventData);
}
void SetDragObjPostion(PointerEventData eventData)
{
Vector3 mouseWorldPosition;
//判断是否点到UI图片上的时候
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(_TargetRect, eventData.position, eventData.pressEventCamera, out mouseWorldPosition))
{
if (isDrag)
{
_TargetRect.position = mouseWorldPosition + offset;
}
else
{
//计算偏移量
offset = _TargetRect.position - mouseWorldPosition;
}
}
}
}
Unity 拖拽UGUI窗口
最新推荐文章于 2026-06-05 08:25:03 发布
这篇博客详细介绍了在Unity中实现UI元素拖放功能的代码实现,包括使用IBeginDragHandler、IDragHandler、IEndDragHandler接口,以及处理拖拽过程中的位置更新和偏移量计算。


810

被折叠的 条评论
为什么被折叠?



