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来实现自己的交互方式。

BaseRaycaster

Unity中射线检测的基类,负责确定目标对象,此类系统均依赖于Event Camera,并用作全部光线投射的源。
*可以自己继承BaseRaycaster来创建自己的光线投射系统。

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 点击方向键,对象被选中才会发生
上一篇下一篇

猜你喜欢

热点阅读