Version: Unity 6.0 (6000.0)
语言 : 中文
UI Document component
结合使用输入系统和事件系统与 UI 工具包的常见问题解答

运行时 UI 事件系统和输入处理

UI 工具包使用事件系统来处理输入并将事件发送到所有活动面板。该系统处理输入事件并将其发送到__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary
中的相应元素。

将 UI 工具包用于不同的输入系统

Unity 提供了两个输入处理系统:旧版输入管理器和新的输入系统包。输入管理器是 Unity 核心平台的一部分,除非安装了输入系统包,否则用作默认系统。新的输入系统包提供了更大的灵活性以及更广泛的设备和平台支持。

UI 工具包的事件系统可以从两个系统接收事件。系统会自动检测激活的输入处理系统并相应处理事件。

设置活动输入处理系统

要在项目中设置活动输入处理系统,请执行以下操作:

  1. 选择编辑 (Edit) > 项目设置 (Project Settings) > 播放器 (Player).

  2. 播放器 (Player) 窗口的其他设置 (Other Settings) > 配置 (Configuration) 下,将活动输入处理 (Active Input Handling) 设置为以下选项之一:

    • 输入管理器(旧)(Input Manager (Old)):使用旧版输入管理器。
    • 输入系统包(新)(Input System Package (New)):使用输入系统包。
    • 两者兼有 (Both):使用输入系统包(如果可用),否则回退到旧版输入管理器。

如果输入系统包在项目中处于活动状态,则 UI 工具包会自动从输入系统中定义的操作派生事件。要配置这些操作,请选择编辑 (Edit) > 项目设置 (Project Settings) > 输入系统包 (Input System Package)

使用输入管理器设置输入处理

要使用输入管理器设置输入处理,请选择编辑 (Edit) > 项目设置 (Project Settings) > 输入管理器 (Input Manager)

输入管理器设置
输入管理器设置

您可以配置水平 (Horizontal) 轴和垂直 (Vertical) 轴以影响 UI 工具包中的 NavigationMoveEvents 生成方式。您还可以修改提交 (Submit)取消 (Cancel) 操作以在 UI 工具包中生成 NavigationSubmitEventNavigationCancelEvents

使用输入系统包设置输入处理

要使用输入系统包设置输入处理,请选择编辑 (Edit) > 项目设置 (Project Settings) > 输入系统包 (Input System Package)

输入系统设置
输入系统设置

与输入管理器相比,输入系统包具有更强的可配置性。您可以使用项目范围内的操作资产来设置如何为 UI 工具包生成 NavigationMoveEventsPointerMoveEvent(“UI / Point”操作)、PointerDownEventPointerUpEvent(“UI / Click”)、WheelEvent(“UI / ScrollWheel”)、NavigationSubmitEventNavigationCancelEvent

将 UI 工具包和 uGUI 用于不同的输入系统

可以同时使用 UI 工具包的 UI 文档和 uGUI 组件。将 UI 工具包(和 uGUI)用于不同的输入系统时,需要选择适当的输入模块。

下表概述了每种输入系统用法所需的组件和设置:

用法 必需组件 活动输入处理
具有旧版输入管理器的 UI 工具包元素 默认事件系统(无需场景组件) 输入管理器(旧)
包含输入系统包的 UI 工具包元素 默认事件系统(无需场景组件) 输入系统包(新)两者兼有
具有旧版输入管理器的 UI 工具包元素和 uGUI 组件 一个独立输入模块和一个 EventSystem 组件 输入管理器(旧)两者兼有
具有输入系统包的 UI 工具包元素和 uGUI 组件 输入系统 UI 输入模块EventSystem 组件 输入系统包(新)两者兼有

将第一个 uGUI 元素添加到场景时,EventSystemStandalone Input Module 会自动添加到场景中。

EventSystem 属于 uGUI。它负责通过可互换的输入模块组件从旧版输入管理器或输入系统包派生的 uGUI 事件。

独立输入模块将事件分发到 UI 工具包元素。

在项目中激活输入系统包时,将添加一个输入系统 UI 输入模块而不是独立输入模块输入系统 UI 输入模块及其随附的 EventSystem 可确保正确分发来自 UI 工具包和 uGUI 元素的事件。

EventSystem 负责读取场景和执行事件,而输入系统 UI 输入模块处理输入并启动事件执行。您可以使用其他输入模块来更改独立输入模块输入系统 UI 输入模块,从而更改使用的输入类型。无论使用哪个输入模块,所有事件都通过 EventSystem 执行。

如果在场景中添加并启用 uGUI EventSystem,UI 工具包会检测到该事件,并为每个 UI 工具包面板创建两个与 uGUI 兼容的组件:PanelRaycasterPanelEventHandler。这些组件充当 uGUI 事件和 UI 工具包事件之间的中介。这些组件的存在会停用 UI 工具包的自动内置输入处理。这意味着 UI 工具包依赖于这些组件来处理存在的输入事件。

如果场景使用多个面板设置资产,则事件系统会根据其排列顺序将指针事件分发到面板。UI 工具包会将面板的排列顺序与 uGUI 画布和其他有效射线投射目标的排列顺序进行比较,从而确定指针事件的接收者。此过程决定 UI 工具包元素、uGUI 对象还是场景中的另一个对象接收事件。同样,UI 工具包使用 EventSystemcurrentSelectedGameObject 来管理焦点。当 UI 工具包面板想要获得焦点时,它会从其他 uGUI 对象中移除焦点,当 uGUI 对象被选中时,UI 工具包面板会自动失去焦点。

指针事件在面板中传播,直到面板响应为止。第一个使用事件来影响聚焦元素的面板将成为事件系统的聚焦面板。此面板将继续接收键盘事件,直到另一个事件导致不同的面板成为焦点面板。

注意:停止事件传播和给予元素焦点是不同的操作。例如,单击按钮时,它会停止传播并仅允许按钮响应按下,但不会阻止其他默认单击操作,例如为按钮或任何单击的可聚焦元素提供焦点。

其他资源

UI Document component
结合使用输入系统和事件系统与 UI 工具包的常见问题解答