版本:Unity 6 (6000.0)
语言:English
使用事件控制行为
使用操纵器捕获指针

分发事件

事件系统一种根据输入(无论是键盘、鼠标、触摸还是自定义输入)向应用程序中的对象发送事件的方法。事件系统由一些协同工作的组件组成,用于发送事件。更多信息
参见 术语表
监听来自操作系统或脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。更多信息
参见 术语表
的事件,然后使用 EventDispatcher 将这些事件分派到视觉元素视觉树的一个节点,它实例化或派生自 C# VisualElement 类。您可以设置外观样式、定义行为并在屏幕上将其显示为 UI 的一部分。更多信息
参见 术语表
。事件分派器为其发送的每个事件确定合适的调度策略。确定后,分派器将执行该策略。

视觉元素为多个事件实现了默认行为。这涉及创建和执行其他事件。例如,PointerMoveEvent 可以生成额外的 PointerEnterEventPointerLeaveEvent。这些事件进入队列并在当前事件之后处理。例如,PointerMoveEventPointerEnterEventPointerLeaveEvent 事件之前完成处理。

事件类型的分派行为

每种事件类型都有其自己的分派行为。每种事件类型的行为分为两个阶段

  • 向下传递:在向下传递阶段发送到元素的事件。
  • 向上冒泡:在向上冒泡阶段发送到元素的事件。

有关每种事件类型的分派行为列表,请参阅 事件参考页面

事件传播

事件分派器选择事件目标后,它会计算事件的传播路径。传播路径是接收事件的视觉元素的有序列表。传播路径按以下顺序发生

  1. 路径从视觉元素树的根开始,向下到达目标。这是向下传递阶段
  2. 事件目标接收事件。
  3. 然后事件沿着树向上到达根。这是向上冒泡阶段
Propagation path
传播路径

大多数事件类型都会发送到传播路径上的所有元素。某些事件类型会跳过向上冒泡阶段,而某些事件类型仅发送到事件目标。

如果隐藏或禁用某个元素,它将不会接收事件。事件仍会传播到隐藏或禁用的元素的祖先和后代。

事件目标

当事件沿着传播路径传播时,Event.currentTarget 会更新为处理事件的元素。在事件回调函数中,有两个属性可以记录分派行为

事件的目标取决于事件类型。对于指针事件,目标通常是最顶层的可拾取元素,位于指针正下方。对于键盘事件,目标是具有焦点的元素。

UI 工具包事件具有一个 target 属性,该属性包含对事件发生位置的元素的引用。对于大多数源自操作系统的事件,分派过程会自动查找事件目标。

目标元素存储在 EventBase.target 中,并且在分派过程中不会更改。属性 Event.currentTarget 会更新为当前处理事件的视觉元素。

拾取模式和自定义形状

大多数指针事件使用拾取模式来决定其目标。VisualElement 类具有一个 pickingMode 属性,它支持以下值

您可以覆盖 VisualElement.ContainsPoint() 方法以执行自定义交集逻辑。

其他资源

使用事件控制行为
使用操纵器捕获指针