Version: Unity 6.0 (6000.0)
言語 : 日本語
マニピュレーター
イベントの参照

イベントの統合と送信

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

UI Toolkit は、パネルを通じてビジュアル要素にイベントを送信します。イベントにターゲットがない場合は、パネルのルート要素に送信されます。伝播経路を持つには要素にターゲットが必要で、送信者はそのターゲットを事前に設定する必要があります。イベントタイプの中には、ターゲットを必要としないものがあります。例えば、キーボードイベントはフォーカスされている要素に送信され、ポインターイベントはポインターの下の要素に送信されます。

イベントシステムは、イベントオブジェクトの割り当ての繰り返しを避けるために、イベントのプールを使用します。

独自のイベントを統合して送信するには、以下を行います。

  1. イベントのプールからイベントオブジェクトを取得します。
  2. イベントプロパティを入力します。
  3. イベントを using ブロックで囲み、イベントプールに確実に返却されるようにします。
  4. イベントを panel.visualTree.SendEvent() に渡します。

キーボードイベントやポインターイベントなどの OS のイベントを送信できます。これを行うには、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);
    }
}

重要: OS の外部から送信されたイベントや、UnityEngine.Event タイプに含まれていないイベントは送信しないでください。UI Toolkit は、内部状態の変化に対する反応としていくつかのイベントを送信します。外部プロセスはこれらのイベントを送信しないでください。例えば PointerCaptureEvent を送信すると、ビジュアル要素はそのイベントの基本的な条件が満たされているとみなして、それらの要素にポインターキャプチャを設定しません。ビジュアル要素の内部設定の整合性がとれなくなり、未定義の動作が発生する可能性があります。

追加リソース

マニピュレーター
イベントの参照