Unity3D UGUI事件分发(二):实现分析


在Unity3d中,功能模块的每个部分都有对应的实现类。

  • 监测器(Monitor)对应类为EventSystem。它重写了MonoBehavior的Update方法,会在每一帧更新挂载在同一个GameObject上的采集器组件状态,并判断是否应该激活派发器,如果是,则去调用各个派发器中的派发函数Process。

  • 采集器(Collector)由两部分组成,对应类分别为BaseInputModule和BaseRaycaster,在UGUI中默认使用的是它们的子类StandaloneInputModule和GraphicRaycaster。当用户操作时,会先由BaseInputModule激活模块,然后发出一个射线点触,返回在BaseRayCaster中能点到的物体并返回信息,交由派发器进行过滤。所以采集器有两端,连接它们要靠EventSystem。整个过程中还有一个静态内部的管理类RaycasterManager,用来做连接采集器和监测器的数据桥梁。

  • 派发器(Dispatcher)对应类也为BaseInputModule,最常用的是它的子类StandaloneInputMoudle,这时该类的角色与采集器混在了一起。派发器完成了实际的事件生成。包括且不限于:事件类型的确定,事件内容的提取,派发对象的过滤。其中对派发对象的获取需要借助采集器,但需要通过监测器来驱动。这种设计可以带来效率上的优势,即可以合并采集操作,以达到降低事件频率的目的。

  • 响应器(Receiver)对应类为IEventSystemHandler及其子类,例如最常用的IPointerClickHandler,它的作用是处理点击事件。通过ExecuteEvents类,可以将发生事件的对象上所有的响应器都获取到并调用其响应逻辑。以点击为例,事件最终会被派发到OnClick的代理上。完成逻辑的执行。

本文出自 松阳论道 转载必须注明出处

http://blog.songyang.net/5553.html

说点什么吧...

电子邮件地址不会被公开。 必填项已用*标注