事件系统一种根据输入(无论是键盘、鼠标、触摸还是自定义输入)向应用程序中的对象发送事件的方法。事件系统由一些协同工作的组件组成,用于发送事件。更多信息
参见 术语表 监听来自操作系统或脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。更多信息
参见 术语表 的事件,然后使用 EventDispatcher 将这些事件分派到视觉元素视觉树的一个节点,它实例化或派生自 C# VisualElement
类。您可以设置外观样式、定义行为并在屏幕上将其显示为 UI 的一部分。更多信息
参见 术语表。事件分派器为其发送的每个事件确定合适的调度策略。确定后,分派器将执行该策略。
视觉元素为多个事件实现了默认行为。这涉及创建和执行其他事件。例如,PointerMoveEvent
可以生成额外的 PointerEnterEvent
和 PointerLeaveEvent
。这些事件进入队列并在当前事件之后处理。例如,PointerMoveEvent
在 PointerEnterEvent
和 PointerLeaveEvent
事件之前完成处理。
每种事件类型都有其自己的分派行为。每种事件类型的行为分为两个阶段
有关每种事件类型的分派行为列表,请参阅 事件参考页面。
事件分派器选择事件目标后,它会计算事件的传播路径。传播路径是接收事件的视觉元素的有序列表。传播路径按以下顺序发生
大多数事件类型都会发送到传播路径上的所有元素。某些事件类型会跳过向上冒泡阶段,而某些事件类型仅发送到事件目标。
如果隐藏或禁用某个元素,它将不会接收事件。事件仍会传播到隐藏或禁用的元素的祖先和后代。
当事件沿着传播路径传播时,Event.currentTarget
会更新为处理事件的元素。在事件回调函数中,有两个属性可以记录分派行为
EventBase.currentTarget
是注册回调的视觉元素。EventBase.target
是事件发生的元素,例如,指针正下方的元素。事件的目标取决于事件类型。对于指针事件,目标通常是最顶层的可拾取元素,位于指针正下方。对于键盘事件,目标是具有焦点的元素。
UI 工具包事件具有一个 target
属性,该属性包含对事件发生位置的元素的引用。对于大多数源自操作系统的事件,分派过程会自动查找事件目标。
目标元素存储在 EventBase.target
中,并且在分派过程中不会更改。属性 Event.currentTarget
会更新为当前处理事件的视觉元素。
大多数指针事件使用拾取模式来决定其目标。VisualElement
类具有一个 pickingMode
属性,它支持以下值
PickingMode.Position
(默认值):根据位置矩形执行拾取。PickingMode.Ignore
:防止作为指针事件结果的拾取。您可以覆盖 VisualElement.ContainsPoint()
方法以执行自定义交集逻辑。