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窗口
最新推荐文章于 2024-07-01 00:03:50 发布
这篇博客详细介绍了在Unity中实现UI元素拖放功能的代码实现,包括使用IBeginDragHandler、IDragHandler、IEndDragHandler接口,以及处理拖拽过程中的位置更新和偏移量计算。
摘要由CSDN通过智能技术生成