Event System Reference
本节提供以下事件系统组成部分的详细信息:
- Event System Manager
- Graphic Raycaster
- Physics Raycaster
- Physics2D Raycaster
- Standalone Input Module
- Touch Input Module
- Event Trigger
Event System Manager(事件系统管理器)
该子系统负责控制组成事件系统的所有其他元素。它协调当前处于激活状态的 Input Module(输入模块) ,当前被认为“已选中”的 GameObject(游戏对象) ,以及其他一系列高级事件系统概念。
每次 Update(更新) 调用时,Event System 会查看其所有输入模块,并判断当前这一帧(tick)应使用哪一个输入模块。然后,它会将处理任务委托给该模块。
属性(Properties)
属性(Property) | 功能(Function) |
---|---|
First Selected(最初选中的对象) | 第一个被选中的 GameObject(游戏对象)。 |
Send Navigation Events(发送导航事件) | EventSystem 是否允许导航事件(移动 / 提交 / 取消)。 |
Drag Threshold(拖拽阈值) | 拖拽的软边界,以像素为单位。 |
属性表下方是一个按钮: “Add Default Input Modules(添加默认输入模块)” 。
Graphic Raycaster(图形射线检测器)
Graphic Raycaster 用于对 Canvas(画布) 执行射线检测。该射线检测器会检查画布上的所有 Graphics(图形) ,并判断是否有被命中。
Graphic Raycaster 可配置为忽略背面朝向的图形(Backfacing Graphics),也可以被其前方的 2D 或 3D 物体所阻挡。如果你希望将此元素的处理优先级手动设置为最前或最后,也可以通过设置优先级实现。
属性(Properties)
属性(Property) | 功能(Function) |
---|---|
Ignore Reversed Graphics(忽略反向图形) | 是否忽略面朝背离射线检测器的图形? |
Blocked Objects(阻挡对象) | 会阻挡图形射线检测的对象类型。 |
Blocking Mask(阻挡遮罩) | 会阻挡图形射线检测的对象遮罩类型。 |
Physics Raycaster(物理射线检测器)
该射线检测器用于对场景中的 3D 物体进行射线检测。这允许将消息发送给实现了事件接口的 3D 物理对象。
属性(Properties)
属性(Property) | 功能(Function) |
---|---|
Depth(深度) | 获取配置相机的深度。 |
Event Camera(事件相机) | 获取此模块使用的相机。 |
Event Mask(事件遮罩) | 相机遮罩与 eventMask 的逻辑与运算结果。 |
Final Event Mask(最终事件遮罩) | 相机遮罩与 eventMask 的逻辑与运算结果。 |
Physics 2D Raycaster(2D 物理射线检测器)
2D 射线检测器用于对场景中的 2D 对象进行射线检测。这允许将消息发送给实现了事件接口的 2D 物理对象。需要为此使用 Camera GameObject(相机游戏对象) ,如果未将 Physics 3D Raycaster 添加到该相机对象,则会自动将其添加。
关于更多 Raycaster(射线检测器)信息,请参阅 Raycasters 文档。
属性(Properties)
属性(Property) | 功能(Function) |
---|---|
Event Camera(事件相机) | 为此射线检测器生成射线的相机。 |
Priority(优先级) | 与其他射线检测器相比的优先级。 |
Sort Order Priority(排序顺序优先级) | 基于排序顺序的射线检测器优先级。 |
Render Order Priority(渲染顺序优先级) | 基于渲染顺序的射线检测器优先级。 |
Standalone Input Module(独立输入模块)
该模块的设计行为符合你对控制器 / 鼠标输入的预期。按钮按下、拖拽等事件会根据输入情况发送。
当鼠标或其他输入设备在场景中移动时,该模块会向组件发送 Pointer(指针)事件 ,并使用 Graphics Raycaster(图形射线检测器) 和 Physics Raycaster(物理射线检测器) 来计算当前被某个输入设备指向的是哪个元素。你可以根据需求配置这些射线检测器以检测或忽略场景的部分内容。
该模块还会根据 Input 窗口中追踪的输入,发送移动事件(move)以及提交 / 取消事件(submit / cancel)。这对键盘和控制器输入都适用。可在模块的 Inspector(检查器) 中配置追踪的轴和按键。
属性(Properties)
属性(Property) | 功能(Function) |
---|---|
Horizontal Axis(水平轴) | 输入你希望用于水平轴的管理器名称。 |
Vertical Axis(垂直轴) | 输入你希望用于垂直轴的管理器名称。 |
Submit Button(提交按钮) | 输入你希望用于提交按钮的管理器名称。 |
Cancel Button(取消按钮) | 输入你希望用于取消按钮的管理器名称。 |
Input Actions Per Second(每秒输入次数) | 每秒允许多少次键盘 / 控制器输入。 |
Repeat Delay(重复延迟) | 在输入动作开始重复之前的延迟秒数。 |
Force Module Active(强制启用模块) | 启用该属性以强制激活此 Standalone Input Module(独立输入模块)。 |
详细说明(Details)
该模块使用:
- Vertical / Horizontal(垂直 / 水平)轴 进行键盘和控制器导航
- Submit / Cancel 按钮 发送提交和取消事件
- 在事件之间设有超时限制,确保每秒最多触发一定数量的事件
模块流程如下:
- 若输入窗口中输入了有效轴,则向选中的对象发送 Move(移动)事件
- 若按下了 Submit 或 Cancel 按钮 ,则向选中的对象发送提交或取消事件
- 处理鼠标输入:
- 如果是新按下:
- 向层级中每个可处理的对象发送 PointerEnter(指针进入)事件
- 发送 PointerPress(指针按下)事件
- 缓存拖拽处理器(层级中第一个能处理拖拽的元素)
- 向拖拽处理器发送 BeginDrag(开始拖拽)事件
- 将“按下”的对象设为 EventSystem 中的已选中对象
- 如果是持续按压:
- 处理移动
- 向缓存的拖拽处理器发送 Drag(拖拽)事件
- 如果触摸在对象之间移动,处理 PointerEnter / PointerExit(指针进入 / 离开)事件
- 如果是释放:
- 向接收 PointerPress 的对象发送 PointerUp(指针抬起)事件
- 若当前悬停对象与 PointerPress 对象一致,则发送 PointerClick(点击)事件
- 如果存在缓存的拖拽处理器,则发送 Drop(放下)事件
- 向缓存的拖拽处理器发送 EndDrag(结束拖拽)事件
- 处理滚轮事件(Scroll)
- 如果是新按下:
Touch Input Module(触摸输入模块)
注意:TouchInputModule 已被弃用。触摸输入现在由 StandaloneInputModule 处理。
该模块专为触摸设备设计。它会根据用户输入发送指针触摸和拖拽事件。支持多点触控。
该模块使用场景中配置的 Raycasters(射线检测器) 来计算当前被触摸的元素。每个当前的触摸都会发出一次射线检测。
属性(Properties)
属性(Property) | 功能(Function) |
---|---|
Force Module Active(强制启用模块) | 强制激活此模块。 |
模块流程如下:
- 对每个触摸事件:
- 如果是新按下:
- 向层级中每个可处理的对象发送 PointerEnter(指针进入)事件
- 发送 PointerPress(指针按下)事件
- 缓存拖拽处理器(层级中第一个能处理拖拽的元素)
- 向拖拽处理器发送 BeginDrag(开始拖拽)事件
- 将“按下”的对象设为 EventSystem 中的已选中对象
- 如果是持续按压:
- 处理移动
- 向缓存的拖拽处理器发送 Drag(拖拽)事件
- 如果触摸在对象之间移动,处理 PointerEnter / PointerExit(指针进入 / 离开)事件
- 如果是释放:
- 向接收 PointerPress 的对象发送 PointerUp(指针抬起)事件
- 若当前悬停对象与 PointerPress 对象一致,则发送 PointerClick(点击)事件
- 如果存在缓存的拖拽处理器,则发送 Drop(放下)事件
- 向缓存的拖拽处理器发送 EndDrag(结束拖拽)事件
- 如果是新按下:
Event Trigger(事件触发器)
Event Trigger 从 Event System(事件系统) 接收事件,并为每个事件调用注册的函数。
你可以使用 Event Trigger 为每一个事件系统事件指定希望调用的函数。你可以为单个事件指定多个函数,每当 Event Trigger 接收到该事件时,就会调用这些函数。
注意: 为 GameObject 添加 Event Trigger 组件后,该对象会拦截所有事件,不会再向上传递(冒泡)事件!
事件(Events)
点击 Add New Event Type(添加新事件类型)按钮 ,可以选择将每个支持的事件包含在 Event Trigger 中。