UGUI中的 事件派发机制:
在使用UGUI的时候 创建Canvas会自动 创建一个EventSystem 这个EventSystem就是个监听器(监测器)它会在Update里检查 InputMoudle,判断是否 活跃状态,是否应该**它,不是就从List中移除掉,如果是当前的Moudel,,并且需要改变, 就调用Process派发函数, 这里的BaseInputMoudle 是 用来采集用户行为的,当用户 操作时,会检查位置方向, 赋点触信息,对其执行光线转换
采集器。采集后 ,InputMoudle会去派发委托事件,给响应器,各种handle 处理,再通过ExceuteEvents,来进行执行其响应逻辑委托事件,最后派发到button上,Invoke 会执行Onclick的委托。
右边的
BaseInputMoudle的处理 函数, 处理滑入和滑出,
GraphicRaycaster的RayCast 方法 , 添加到List里面后再进行排序。
就是深度管理啦。
翻译:
//沿着这棵树往上走,直到最后进入的和当前进入的之间有一个共同的根
//将退出事件发送到(但不包括)公共根。然后将enter事件发送到
//(但不包括公共根)。
Uniy中的层级面板就是 树的 结构, 下面是BaseInputMoudle 里面的 FindCommonRoot函数
Enter
Exit
ExecuteEvents 底下的Excute 函数
该委托函数 会传一个handler 响应器,和 一个 BaseEventData 数据类
响应器 中都有响应 方法handle
关于它的调用:ProcessTouchPress
主要信息都存放在PointerEventData里边
这里 BaseInputMoudle从当 采集 和派发 两个作用
在EventSystem Update函数里 会对所有UnityEvent BaseInputModule 进行监听
StandaloneInputMoudle: 通过Id去派发
发送更新选择对象事件
计算和派发 任务 鼠标 状态改变事件
UGUI Button点击事件是在 抬起的时候才触发的。
总结:
在使用UGUI的时候 创建Canvas会自动 创建一个EventSystem 这个EventSystem就是个监听器(监测器)它会在Update里检查 InputMoudle,判断是否 活跃状态,是否应该**它,不是就从List中移除掉,如果是当前的Moudel,,并且需要改变, 就调用Process派发函数, 这里的BaseInputMoudle 是 用来采集用户行为的,当用户 操作时,会检查位置方向, 赋点触信息,对其执行光线转换
采集器。采集后 ,InputMoudle会去派发委托事件,给响应器,各种handle 处理,再通过ExceuteEvents,来进行执行其响应逻辑委托事件,最后派发到button上,Invoke 会执行Onclick的委托。
这种做法对 编辑的人挺有好的,添加的事件的时候 很好添加,但是 在移除的时候, 是会通过放射 取得MethodInfo 去对比的。
这样其实比较耗性能的。