在合成和发送自定义事件之前,应了解 UI 工具包事件系统如何分配和发送操作系统事件。
事件系统使用事件池来避免重复分配事件对象。要合成和发送自定义事件,应按照相同的步骤分配和发送事件:
1.从事件池中获取一个事件对象。
2.填写事件属性。
3.将事件包含在 using
代码块中以确保其返回到事件池。
4.将事件传递给 element.SendEvent()
。
如果要发送通常来自操作系统的事件,例如键盘事件和一些鼠标事件,请使用 UnityEngine.Event
来初始化 UI 工具包事件。
以下示例演示了如何合成和发送事件:
void SynthesizeAndSendKeyDownEvent(IPanel panel, KeyCode code,
char character = '\0', EventModifiers modifiers = EventModifiers.None)
{
// 创建 UnityEngine.Event 以保存初始化数据。
// 此外,此事件将转发给 IMGUIContainer.m_OnGUIHandler
var evt = new Event() {
type = EventType.KeyDownEvent,
keyCode = code,
character = character,
modifiers = modifiers
};
using (KeyDownEvent keyDownEvent = KeyDownEvent.GetPooled(evt))
{
panel.SendEvent(keyDownEvent);
}
}