EventSystem事件系统的源码目录结构如下:大致可分为EventData、InputModules、Raycasters、EventSystem、ExecuteEvents。
EventSystem的职责:
- 管理和处理输入事件(InputModule)
- 调用Raycaster发起射线检测,获取输入事件投射到的物体
- 将事件发送给投射物体处理。
每个场景一般有且只有一个EventSystem,EventSystem上一般会挂一个InputModule模块。
EventData
- BaseEventData:基础的事件信息,持有EventSystem
-
PointerEventData: 继承于BaseEventData,存储 触摸/点击/鼠标操作 事件信息,部分信息如下:
-
AxisEventData:继承于BaseEventData,移动相关的事件信息。
InputModules
-
BaseInput, 封装了触摸和鼠标的相关事件获取。
-
BaseInputModule ,所有InputModule的基类,抽象函数
public abstract void Process();
,持有EventSystem,EventData,BaseInput。OnEnable中调用EventSystem#UpdateModules注册输入模块。
EventSystem的Update函数中,先通过TickModules调用InputModule的UpdateModule函数,然后调用Process函数分发事件。
-
PointerInputModule,继承于BaseInputModule,封装了一些工具函数,比如
GetTouchPointerEventData
用于将Touch转为EventData,GetMousePointerEventData
用于将鼠标点击事件转为MouseState(MouseState存放着三个鼠标按钮的事件数据)。 -
StandaloneInputModule,继承于PointerInputModule,Process函数中,先调用ProcessTouchEvents处理触摸事件,如果没有触摸事件则调用ProcessMouseEvent处理鼠标事件。