カスタムイベントを統合して送信する前に、UI Toolkit のイベントシステムがオペレーティングシステムのイベントをどのように割り当てて送信するか を理解しておく必要があります。
イベントシステム は、イベントオブジェクトの繰り返しの割り当てを避けるために、イベントのプールを使用します。 独自のイベントを統合して送信するには、以下を行ってください。
using
ブロックで囲み、イベントプールに確実に返却されるようにします。element.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 Toolkit によって送信されるものであり、外部プロセスから送信してはいけません。例えば、PointerCaptureEvent
を送信すると、ビジュアル要素は、そのイベントの基本的な条件が満たされていると見なし、そのイベントに対するポインターキャプチャを設定しません。これにより、ビジュアル要素の内部設定が破損し、未定義の動作が引き起こされる可能性があります。