Version: 2022.2
言語: 日本語
Handle events
イベントリファレンス

イベントの統合と送信

カスタムイベントを統合して送信する前に、UI Toolkit のイベントシステムがオペレーティングシステムのイベントをどのように割り当てて送信するか を理解しておく必要があります。

イベントシステム は、イベントオブジェクトの繰り返しの割り当てを避けるために、イベントのプールを使用します。 独自のイベントを統合して送信するには、以下を行ってください。

  1. イベントのプールからイベントオブジェクトを取得します。
  2. イベントプロパティを入力します。
  3. イベントを using ブロックで囲み、イベントプールに確実に返却されるようにします。
  4. イベントを 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 を送信すると、ビジュアル要素は、そのイベントの基本的な条件が満たされていると見なし、そのイベントに対するポインターキャプチャを設定しません。これにより、ビジュアル要素の内部設定が破損し、未定義の動作が引き起こされる可能性があります。

その他の参考資料

Handle events
イベントリファレンス