深入 UGUI源码中的 Hover Exit滑入 滑出
UGUI中的 事件派发机制:

在使用UGUI的时候 创建Canvas会自动 创建一个EventSystem 这个EventSystem就是个监听器(监测器)它会在Update里检查 InputMoudle,判断是否 活跃状态,是否应该**它,不是就从List中移除掉,如果是当前的Moudel,,并且需要改变, 就调用Process派发函数, 这里的BaseInputMoudle 是 用来采集用户行为的,当用户 操作时,会检查位置方向, 赋点触信息,对其执行光线转换
采集器。采集后 ,InputMoudle会去派发委托事件,给响应器,各种handle 处理,再通过ExceuteEvents,来进行执行其响应逻辑委托事件,最后派发到button上,Invoke 会执行Onclick的委托。

深入 UGUI源码中的 Hover Exit滑入 滑出
右边的

BaseInputMoudle的处理 函数, 处理滑入和滑出,

深入 UGUI源码中的 Hover Exit滑入 滑出

GraphicRaycaster的RayCast 方法 , 添加到List里面后再进行排序。
就是深度管理啦。
深入 UGUI源码中的 Hover Exit滑入 滑出

翻译:
//沿着这棵树往上走,直到最后进入的和当前进入的之间有一个共同的根
//将退出事件发送到(但不包括)公共根。然后将enter事件发送到
//(但不包括公共根)。
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
Uniy中的层级面板就是 树的 结构, 下面是BaseInputMoudle 里面的 FindCommonRoot函数
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出

Enter
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
Exit
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
ExecuteEvents 底下的Excute 函数
深入 UGUI源码中的 Hover Exit滑入 滑出
该委托函数 会传一个handler 响应器,和 一个 BaseEventData 数据类
响应器 中都有响应 方法handle

关于它的调用:ProcessTouchPress
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
主要信息都存放在PointerEventData里边

深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
这里 BaseInputMoudle从当 采集 和派发 两个作用

在EventSystem Update函数里 会对所有UnityEvent BaseInputModule 进行监听
深入 UGUI源码中的 Hover Exit滑入 滑出
深入 UGUI源码中的 Hover Exit滑入 滑出
StandaloneInputMoudle: 通过Id去派发
深入 UGUI源码中的 Hover Exit滑入 滑出
发送更新选择对象事件
深入 UGUI源码中的 Hover Exit滑入 滑出
计算和派发 任务 鼠标 状态改变事件
深入 UGUI源码中的 Hover Exit滑入 滑出

UGUI Button点击事件是在 抬起的时候才触发的。

总结:

在使用UGUI的时候 创建Canvas会自动 创建一个EventSystem 这个EventSystem就是个监听器(监测器)它会在Update里检查 InputMoudle,判断是否 活跃状态,是否应该**它,不是就从List中移除掉,如果是当前的Moudel,,并且需要改变, 就调用Process派发函数, 这里的BaseInputMoudle 是 用来采集用户行为的,当用户 操作时,会检查位置方向, 赋点触信息,对其执行光线转换
采集器。采集后 ,InputMoudle会去派发委托事件,给响应器,各种handle 处理,再通过ExceuteEvents,来进行执行其响应逻辑委托事件,最后派发到button上,Invoke 会执行Onclick的委托。

这种做法对 编辑的人挺有好的,添加的事件的时候 很好添加,但是 在移除的时候, 是会通过放射 取得MethodInfo 去对比的。
这样其实比较耗性能的。

相关文章:

  • 2021-10-06
  • 2021-10-23
  • 2021-05-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-28
  • 2022-12-23
  • 2021-12-07
  • 2021-08-11
  • 2022-12-23
相关资源
相似解决方案