版本:Unity 6 (6000.0)
语言:English
操作器
事件参考

合成和发送事件

在合成和发送自定义事件之前,请了解UI 工具包事件系统如何分配和发送操作系统事件

UI 工具包通过面板将事件发送到视觉元素可视树的一个节点,该节点实例化或派生自 C# VisualElement 类。您可以设置外观样式、定义行为并在屏幕上将其显示为 UI 的一部分。 更多信息
参见术语表
。如果事件没有目标,则将其发送到面板的根元素。要拥有传播路径,元素必须具有目标,并且发送方必须提前设置该目标。某些事件类型不需要目标。例如,键盘事件发送到焦点元素,指针事件发送到指针下的元素。

事件系统使用事件池来避免重复分配事件对象。

要合成和发送您自己的事件

  1. 从事件池中获取事件对象。
  2. 填写事件属性。
  3. 将事件包含在using块中以确保将其返回到事件池。
  4. 将事件传递给panel.visualTree.SendEvent()

您可以发送操作系统事件,例如键盘和指针事件。为此,请使用UnityEngine.Event初始化UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见术语表
工具包事件。

以下示例演示如何合成和发送事件

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,视觉元素将假定满足该事件的基础条件,并且不会为其设置指针捕获。这可能会破坏视觉元素的内部配置并导致未定义的行为。

其他资源

操作器
事件参考