Version: Unity 6.0 (6000.0)
语言 : 中文
通过事件控制行为
使用操控器捕获指针

分发事件

事件系统会监听来自操作系统或脚本的事件,然后使用 EventDispatcher 将这些事件分发到视觉元素。事件分发程序为发送的每个事件确定的相应分发策略。一旦确定,分发程序就会执行该策略。

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

事件类型的分发行为

每个事件类型都有自身的分发行为。每种事件类型的行为分为两个阶段:

  • 涓滴:在涓滴阶段发送到元素的事件。
  • 冒泡:在冒泡阶段发送到元素的事件。

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

事件传播

事件分发程序在选择事件目标后,会计算事件的传播路径。传播路径是接收事件的视觉元素的有序列表。传播路径上的顺序如下:

  1. 路径从视觉元素树的根部开始,并朝着目标下降。此阶段称为涓滴阶段
  2. 事件目标接收事件。
  3. 然后事件沿着树上升到根。此阶段称为冒泡阶段
传播路径
传播路径

大多数事件类型将沿传播路径发送到所有元素。某些事件类型跳过冒泡阶段,某些事件类型仅发送到事件目标。

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

事件目标

在事件沿着传播路径行进时,Event.currentTarget 更新为当前正在处理该事件的元素。在事件回调函数中,有两个属性记录了分发行为:

事件目标取决于事件类型。对于指针事件,目标最常见的是直接位于指针下方最上层的可选择元素。对于键盘事件,目标是当前获得焦点的元素。

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

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

拾取模式和自定义形状

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

可以重载 VisualElement.ContainsPoint() 方法来执行自定义的交集逻辑。

其他资源

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