Unity 给控件添加事件处理的三种方式 以及IDragHandler IDropHandler的实现
1、写类的时候 添加对应事件的 Handler 接口 (常用)
2、给物体增加 EventTrigger 组件 -> AddComponent->添加对应的 事件处理 如图


3、直接在代码里 获取到组件 然后添加 EventTrigger
一般使用第一种
以下是实现拖拽效果的代码
using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class Test : MonoBehaviour, IInitializePotentialDragHandler, IBeginDragHandler,IDragHandler,IEndDragHandler { private int _index; // Start is called before the first frame update void Start() { Debug.Log("Start==========="); } public void ChangeColor(BaseEventData data) { Debug.Log("ChangeColor==========="); if (_index == 0) { GetComponent<Image>().color = Color.blue; } else { GetComponent<Image>().color = Color.white; } _index = _index == 0 ? 1 : 0; } public void OnInitializePotentialDrag(PointerEventData eventData) { Debug.Log("OnInitializePotentialDrag==========="); } public void OnBeginDrag(PointerEventData eventData) { Debug.Log("OnBeginDrag==========="); } // 其他三个接口 依赖于 IDragHandler 接口 如果把IDragHandler 去掉 那么其他三个函数也不会响应 public void OnDrag(PointerEventData eventData) { // eventData.position 这个值是 屏幕坐标 也就是它处于屏幕上的哪个位置 需要转换成世界坐标来用 Debug.Log("OnDrag===========" + eventData.position); // 获取当前物体的 RectTransform var rect = GetComponent<RectTransform>(); // 这个值 将用来保存 转换后的坐标 参数带out 关键字 Vector3 pos = Vector3.zero; RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.enterEventCamera, out pos); rect.position = pos; } public void OnEndDrag(PointerEventData eventData) { Debug.Log("OnEndDrag==========="); } }
一般情况下 IDragHandler(拖动物体) 会和 IDropHandler(放下物体)IEndDragHandler 一起使用
注意 :这里 onDrop 函数 会比 onEndDrag 函数先执行
注意:IDropHandler 依赖于 IDragHandler 如果未继承IDragHandler接口 那么IDropHandler的 实现函数也是不会调用的
浙公网安备 33010602011771号