Appearance
EventSystem
这是 Unity 的 EventSystem(事件系统),并且截图使用的是新版 Input System UI Input Module。

一、EventSystem 的作用
EventSystem 不负责绘制 UI,它负责:
- 管理当前选中的 UI 对象。
- 接收鼠标、键盘、触摸、手柄等输入。
- 通过输入模块转换为 UI 事件。
- 协调 Button、Toggle、InputField、ScrollRect 等组件。
- 配合 Canvas 上的
Graphic Raycaster判断鼠标点击了哪个 UI。
事件流程:
c
鼠标 / 键盘 / 触摸
↓
Input Action
↓
InputSystemUIInputModule
↓
Graphic Raycaster
↓
Button、Toggle、InputField、ScrollRectUnity 官方说明:一个 EventSystem 同时只能有一个活动的输入模块。EventSystem 官方文档
二、截图中的 Event System 组件
First Selected
场景开始时默认选中的 GameObject。
常用于手柄或键盘控制:
c
First Selected → StartButton截图中为 None,表示没有默认选中对象。
Send Navigation Events
是否发送导航事件:
- 方向键移动。
- 手柄摇杆移动。
- Submit 提交。
- Cancel 取消。
截图中已开启。如果关闭,键盘和手柄通常不能正常导航 UI。
Drag Threshold
拖拽判定阈值,当前为 10 像素。
鼠标移动距离小于这个数值时,通常仍会被视为点击;超过后才会判断为拖拽。
三、InputSystemUIInputModule
这是新版 Input System 的 UI 输入模块。
它把输入设备产生的动作,转换为 Unity UI 能理解的事件。
当前字段
Send Pointer Hover To Parent:向父物体发送指针悬停信息。Move Repeat Delay = 0.5:按住方向键后,开始连续移动前等待 0.5 秒。Move Repeat Rate = 0.1:连续移动时,每 0.1 秒重复一次。XR Tracking Origin:XR 跟踪坐标参考,当前为空。Deselect On Background Click:点击 UI 背景时取消当前选中对象。Pointer Behavior:当前鼠标或笔作为一个指针,触摸和跟踪设备可以保持多指针。Scroll Delta Per Tick = 6:每次滚轮刻度转换的滚动量。Advanced:高级设置,当前折叠。
四、Actions Asset
截图中使用的是:
c
DefaultInputActions它是一个 Input Action Asset,保存 UI 输入映射。
| Action | 当前映射 | 作用 |
|---|---|---|
| Point | UI / Point | 鼠标或触摸位置 |
| Left Click | UI / Click | 左键点击 |
| Middle Click | UI / MiddleClick | 中键点击 |
| Right Click | UI / RightClick | 右键点击 |
| Scroll Wheel | UI / ScrollWheel | 滚轮 |
| Move | UI / Navigate | 键盘或手柄导航 |
| Submit | UI / Submit | 确认、提交 |
| Cancel | UI / Cancel | 返回、取消 |
| Tracked Position | UI / TrackedDevicePosition | 跟踪设备位置 |
| Tracked Orientation | UI / TrackedDeviceOrientation | 跟踪设备旋转 |
例如:
c
键盘方向键
↓
UI / Navigate
↓
InputSystemUIInputModule
↓
自动选择下一个 Button五、EventSystem、Input Module 和 Raycaster 的区别
c
EventSystem
管理事件和选中状态
InputSystemUIInputModule
解释鼠标、键盘、触摸和手柄输入
Graphic Raycaster
判断鼠标或触摸命中了哪个 UI
Button / Toggle / InputField
执行具体 UI 行为它们缺一不可:
- 没有 EventSystem:按钮通常无法点击。
- 没有 Input Module:输入不会转换成 UI 事件。
- 没有 Graphic Raycaster:Canvas 上的 UI 无法被射线检测。
六、常用代码
设置默认选中对象:
c
using UnityEngine.EventSystems;
EventSystem.current.SetSelectedGameObject(button.gameObject);获取当前选中的对象:
c
GameObject current =
EventSystem.current.currentSelectedGameObject;判断鼠标是否位于 UI 上:
c
bool isOverUI =
EventSystem.current.IsPointerOverGameObject();七、常见问题
- Button 没有反应:检查 EventSystem 和
InputSystemUIInputModule。 - Canvas UI 无法点击:检查 Canvas 是否有
Graphic Raycaster。 - 键盘不能导航:检查
Send Navigation Events和MoveAction。 - 空格键不能提交:检查
SubmitAction。 - 返回键无效:检查
CancelAction。 - 点击事件执行两次:检查是否同时启用了两个输入模块。
- 鼠标能用但触摸不能用:检查
Pointer Behavior和触摸绑定。 - 旧版输入模块和新版输入模块混用:新版项目一般使用
InputSystemUIInputModule,不要同时启用StandaloneInputModule。
官方参考:EventSystem 管理器、Input System、InputSystemUIInputModule API