Unity-UGUI之Event System
2018-04-25 本文已影响189人
passiony
Event System
新建Canvas话不是,系统自动生成的Event System里面主要有两个Components,分别是Event System和Standalone Input Module。
*EventSystem负责管理,BaseInputModule负责输入,BaseRaycaster负责确定目标对象。
1. EventSystem
负责处理输入、射线投射以及发送事件
一个场景中只能有一个EventSystem,否则EventSystem会失效
2. BaseInputModule
负责处理输入(点击、拖拽等),把输入事件发送到具体的对象。
*可以自己继承BaseInputModule来实现自己的交互方式。
- Standalone Input Module:基本的键盘和鼠标输入系统,并跟踪鼠标的位置,以及鼠标/键盘所按下的按键。
- Touch Input Module:基本的触摸输入系统,用于处理触摸、拖拽以及位置数据,并可在其实现中模拟鼠标行为。
- Pointer Input Module:提供上面两者的基本功能,同时还可以通过代码进行访问。
BaseRaycaster
Unity中射线检测的基类,负责确定目标对象,此类系统均依赖于Event Camera,并用作全部光线投射的源。
*可以自己继承BaseRaycaster来创建自己的光线投射系统。
- 在UI中:GraphicRaycaster
- 非UI中:Physics Raycaster 和 Physics 2D Raycaster
UI事件工作流
BaseInputModule接收用户的输入
BaseRaycaster根据用户的输入,找到目标物体
根据用户的输入事件,调用目标物体上的对应接口实现。
内部工作机制
EventSystem把其GameObject上的所有BaseInputModule放到一个内部列表中。
在每一帧调用UpdateModules方法,该方法会去调用列表中所有BaseInputModule的UpdateModule方法。
在UpdateModule方法中,BaseInputModule会把自己的状态修改为"Updated",之后BaseInputModule的Process接口才会被调用
自定义EventSystem事件
事件都必须在对象上操作才会发生
- 点击事件
接口 | 事件 | 作用 |
---|---|---|
IPointerEnterHandler | OnPointerEnter | 鼠标进入对象 |
IPointerExitHandler | OnPointerExit | 鼠标离开对象 |
IPointerDownHandler | OnPointerDown | 按下鼠标 |
IPointerClickHandler | OnPointerClick | 点击中该对象,在OnPointerUp后发生 |
IPointerUpHandler | OnPointerUp | 松开鼠标 |
- 拖拉事件
接口 | 事件 | 作用 |
---|---|---|
IBeginDragHandler | OnBeginDrag | 开始拖拽,必须同时实现IDragHandler |
IDragHandler | OnDrag | 正在拖拽,每当移动一定距离,就发生一次拖拽事件 |
IEndDragHandler | OnEndDrag | 结束拖拽,必须同时实现IDragHandler |
IInitializePotentialDragHandler | OnInitializePotentialDrag | 可能发生拖拽,必须同时实现IDragHandler,在对象内点击就会发生 |
IDropHandler | OnDrop | 拖拉结束,拖拉开始的地方必须先实现IDragHandler |
- 其他事件
接口 | 事件 | 作用 |
---|---|---|
IScrollHandler | OnScroll | 操作鼠标中间的滚轮 |
ISelectHandler | OnSelect | 当EventSystem选中该对象 使用EventSystem中的SetSelectedGameObject方法来选中 |
IDeselectHandler | OnDeselect | 不再选中该对象,点击对象外的地方就会变成不选中 |
IUpdateSelectedHandler | OnUpdateSelected | 当对象被选中,则每帧都会发生,对象被选中才会发生 |
ISubmitHandler | OnSubmit | 点击Submit键(默认是Enter键),对象被选中才会发生 |
ICancelHandler | OnCancel | 点击Cancel键(默认是Esc键),对象被选中才会发生 |
IMoveHandler | OnMove | 点击方向键,对象被选中才会发生 |