合成並發送事件(Synthesize and send events)
事件系統使用一個事件池(pool of events),以避免重複分配事件物件(event object)。要合成並發送自己的事件需要:
- 建立一個UnityEngine.Event用來持有初始化的資料
- 從事件池中獲取一個事件物件。
- 填寫事件的屬性(event properties)。
- 將事件封裝在
using
區塊中,以確保它被返回到事件池。 - 將事件傳遞給
panel.visualTree.SendEvent()
。
下面的例子中會發送一個KeyDownEvent
1 | void SynthesizeAndSendKeyDownEvent(IPanel panel, KeyCode code, |
注意:
- 不能發送不是來自OS(operating system)的事件,
- 不能發送不在
UnityEngine.Event types
中的事件 - 某些事件是由UI Toolkit作為對內部狀態變化的反應而發送的,不應由外部過程發送。例如,如果您發送PointerCaptureEvent,visual elements會假定該事件的底層條件已滿足,並且不會為它們設置指針捕獲(pointer capture)。這可能會破壞visual elements的內部配置(configurations)並導致未定義的行為。
Reference: https://docs.unity3d.com/Manual/UIE-Events-Synthesizing.html