UGUI的EventSystem介绍
创建uGUI控件后,Unity会同时创建一个叫EventSystem的GameObject,用于控制各类事件。可以看到Unity自带了两个Input Module,一个用于响应标准输入,一个用于响应触摸操作。Input Module封装了对Input模块的调用,根据用户操作触发各Event Trigger。理论上我们可以编写自己的Input Module,用来封装各种外部设备的输入,只要加入Event System所在的GameObject就行。
Event System组件则统一管理多个Input Module和各种Raycaster。它每一帧调用多个Input Module处理用户操作,也负责调用多个Raycaster用于获取用户点击的uGUI控件以及2D和3D物体。
EventSystem:
EventSystem 是一种将基于输入的事件发送到应用程序中的对象,无论是键盘、 鼠标、 触摸或自定义输入。
First Selected:
Send Navigation Events:
Drag Threshold:
Standalone Input Module:
input module用于鼠标、键盘和控制器。该模块被配置查看 InputManager,发送事件是基于输入Input manager管理器是何种状态。
Horizontal Axis:水平输入设备
Vertical Axis: 垂直输入设备
Submit Button: 提交按钮事件
Cancel Button:取消按钮事件
Input Action Per Sceond:允许最大每秒事件数
Allow Activeation On Mob..:?
Touch Input Module:
Allow Activation On Sta...:
EventSystem作为事件系统的管理者和调度者,通过每帧获取InputModule到的用户操作和Raycaster到的对象,进行触发该对象上的来自继承接口的方法,如下接口和方法:
Eventsystem支持大量的事件,并且他们可以进一步定制在用户自定义的用户编写的 InputModules中。
支持的StandaloneInputModule和 TouchInputModule的事件提供的接口和所实现的接口可以在 MonoBehaviour中实现。如果你有有效的 EventSystem配置的事件会在正确的时间被调用。
IPointerEnterHandler-OnPointerEnter-当pointer指针进入该对象时调用
IPointerExitHandler-OnPointerExit- pointer指针退出该对象时调用
IPointerDownHandler-OnPointerDown-当指针在对象上按下时调用
IPointerUpHandler-OnPointerUp-pointer指针被释放(原状态为被按下)时调用
IPointerClickHandler-OnPointerClick-pointer指针在同一对象上按下并释放时调用(单击)
IBeginDragHandler-OnBeginDrag-拖动对象在拖动开始时调用
IDragHandler-OnDrag-拖动对象,当拖动正在发生进行时调用
IEndDragHandler-OnEndDrag-拖动对象拖动完成时调用
IDropHandler-OnDrop-对该对象拖动完成时调用
IScrollHandler-OnScroll-当鼠标滚轮滚动时调用
IUpdateSelectedHandler-OnUpdateSelected-在选定的对象上eachtick中调用
ISelectHandler-OnSelect-当对象成为所选的对象时调用
IDeselectHandler-OnDeselect-在被选定的对象成为取消被选择时调用
IMoveHandler-OnMove-移动事件发生时调用(左、右、上、 下等)
ISubmitHandler-OnSubmit-当按下提交按钮时调用
ICancelHandler-OnCancel-当按下取消按钮时调用
EventSystem需要一种方法用于检测当前的输入的事件需要发送到什么上,而这由 Raycasters提供的。Raycasters搜索scene返回给定的屏幕的位置上‘most valid’(最有效的)的对象。有几种类型的 Raycasters被提供:
GraphicRaycaster-用于 UI 元素,在画布上,画布内搜索
Physics2DRaycaster-用于为 2D 物理元素
PhysicsRaycaster-用于为三维物理元素
当一个场景中存在并且启用了Raycaster时,它将被用于EventSystem随时查询InputModule是谁发出的。