UGUI-Events

 

Event System(事件系统)

Event System(事件系统)是一种根据输入(无论是键盘、鼠标、触摸还是自定义输入)向应用程序中的对象发送事件的机制。Event System 由一些组件协作组成,用于发送事件。

当你向一个 GameObject(游戏对象)添加 Event System(事件系统)组件时,你会注意到它本身没有暴露太多功能,这是因为 Event System 本身被设计为一个 管理器 ,用于协调 Event System 模块之间的通信。

Event System 的主要职责如下:

  • 管理哪个 GameObject 被视为选中的对象
  • 管理正在使用的 Input Module(输入模块)
  • 管理 Raycasting(射线检测)(如果需要的话)
  • 根据需要更新所有 Input Module(输入模块)

Input Modules(输入模块)

Input Module 是存放 Event System 主要逻辑的地方,它们用于:

  • 处理输入
  • 管理事件状态
  • 向场景中的对象发送事件

在一个 Event System 中,同一时间只能有一个 Input Module(输入模块)处于激活状态,并且它们必须是与 Event System 组件位于同一个 GameObject上的组件。

如果你想编写自定义的 Input Module,可以发送 Unity 中已有 UI 组件支持的事件。要扩展并编写你自己的事件,请参阅 Messaging System(消息系统)文档。

Raycasters(射线检测器)

Raycaster 用于确定指针当前指向的对象。Input Module 通常会使用场景中配置好的 Raycaster 来计算指针设备所指向的对象。

Unity 默认提供了三种 Raycaster(射线检测器):

  • Graphic Raycaster (图形射线检测器)——用于 UI 元素
  • Physics 2D Raycaster (2D 物理射线检测器)——用于 2D 物理元素
  • Physics Raycaster (3D 物理射线检测器)——用于 3D 物理元素

如果你在场景中配置了 2D / 3D Raycaster,那么让非 UI 元素接收 Input Module 发送的消息就很简单了。只需附加一个实现了相应事件接口的脚本即可。关于示例,请参阅 IPointerEnterHandlerIPointerClickHandler 的脚本参考页面。