包含此页的版本:
不含此页的版本:
在合成和发送自定义事件之前,请了解 UI Toolkit 事件系统如何分配和发送作系统事件。
UI Toolkit 将事件发送到视觉元素实例化或派生自 C# 的可视化树的节点VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息
请参阅术语表通过面板。如果事件没有目标,则会将其发送到面板的根元素。要拥有传播路径,元素必须具有目标,并且发送方必须提前设置该目标。某些事件类型不需要目标。例如,键盘事件发送到焦点元素,指针事件发送到指针下的元素。
事件系统使用事件池来避免重复分配事件对象。
要合成和发送您自己的事件,请执行以下作:
using块以确保它返回到事件池。panel.visualTree.SendEvent().您可以发送作系统事件,例如键盘和指针事件。为此,请使用UnityEngine.Event以初始化 UI Toolkit 事件。
以下示例演示了如何合成和发送事件:
void SynthesizeAndSendKeyDownEvent(IPanel panel, KeyCode code,
char character = '\0', EventModifiers modifiers = EventModifiers.None)
{
// Create a UnityEngine.Event to hold initialization data.
var evt = new Event() {
type = EventType.KeyDownEvent,
keyCode = code,
character = character,
modifiers = modifiers
};
using (KeyDownEvent keyDownEvent = KeyDownEvent.GetPooled(evt))
{
panel.visualTree.SendEvent(keyDownEvent);
}
}
重要提示:不要发送来自作系统外部或UnityEngine.Event类型。UI 工具包发送一些事件作为对内部状态更改的反应。外部进程不得发送这些事件。例如,如果您发送PointerCaptureEvent,视觉元素假定满足该事件的基本条件,并且不会为它们设置指针捕获。这可能会破坏视觉元素的内部配置并导致未定义的行为。