Skip to content

EventSystem

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

image-20260713121825852

Unity_UI_EventSystem_InputSystem_Inspector_Expanded_Guide

一、EventSystem 的作用

EventSystem 不负责绘制 UI,它负责:

  • 管理当前选中的 UI 对象。
  • 接收鼠标、键盘、触摸、手柄等输入。
  • 通过输入模块转换为 UI 事件。
  • 协调 Button、Toggle、InputField、ScrollRect 等组件。
  • 配合 Canvas 上的 Graphic Raycaster 判断鼠标点击了哪个 UI。

事件流程:

c
鼠标 / 键盘 / 触摸

Input Action

InputSystemUIInputModule

Graphic Raycaster

Button、Toggle、InputField、ScrollRect

Unity 官方说明:一个 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当前映射作用
PointUI / Point鼠标或触摸位置
Left ClickUI / Click左键点击
Middle ClickUI / MiddleClick中键点击
Right ClickUI / RightClick右键点击
Scroll WheelUI / ScrollWheel滚轮
MoveUI / Navigate键盘或手柄导航
SubmitUI / Submit确认、提交
CancelUI / Cancel返回、取消
Tracked PositionUI / TrackedDevicePosition跟踪设备位置
Tracked OrientationUI / 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 EventsMove Action。
  • 空格键不能提交:检查 Submit Action。
  • 返回键无效:检查 Cancel Action。
  • 点击事件执行两次:检查是否同时启用了两个输入模块。
  • 鼠标能用但触摸不能用:检查 Pointer Behavior 和触摸绑定。
  • 旧版输入模块和新版输入模块混用:新版项目一般使用 InputSystemUIInputModule,不要同时启用 StandaloneInputModule

官方参考:EventSystem 管理器Input SystemInputSystemUIInputModule API

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0