UGUI-OnDrag事件
示例代码:
using UnityEngine.EventSystems;
public class TestOnDrag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
throw new System.NotImplementedException();
}
public void OnDrag(PointerEventData eventData)
{
throw new System.NotImplementedException();
}
public void OnEndDrag(PointerEventData eventData)
{
throw new System.NotImplementedException();
}
}
- 只用实现了接口的脚本才会收到事件
- 只有拖拽发生在RectTransform范围内,才会收到事件
- Image组件的RayCast Target 需要打开
如何使用PointerEventData
position
- 当前触摸点
- 屏幕坐标系(ScreenPoint)
- 取值范围
- Horizontal:[0,Screen.width]
- Veritcal:[0,Screen.height]
- 鼠标有时会超出屏幕,从而输出超出区间的值
屏幕空间->世界坐标/局部坐标空间(转换)
RectTransformUtility.ScreenPointToLocalPointInRectangle(
cachedRectTransform, eventData.position, cam, out thumbPosition);
- 参数说明:
- cachedRectTransform: 一般是要移动节点的母节点。
- eventData.position: 拖拽的屏幕坐标。
- cam:参数应为与此屏幕点关联的摄像机
- bug
使用eventData.enterEventCamera 发现这东西经常是空的,导致转换坐标出错。
参考文章
Unity-UGUI-OnDrag 适配问题
|