Version: Unity 6.0 (6000.0)
言語 : 日本語
イベントによる動作の制御
マニピュレーターによるポインターのキャプチャ

ディスパッチイベント

イベントシステムは、オペレーティングシステムまたはスクリプトから発生するイベントをリッスンし、EventDispatcher を使用してそれらのイベントをビジュアル要素にディスパッチします。イベントディスパッチャーは、送信する各イベントに適切なディスパッチ方法を決定します。方法を決定すると、ディスパッチャーは決定した方法を実行します。

ビジュアル要素は、いくつかのイベントに対してデフォルトの動作を実装します。これには、追加のイベントの作成と実行が含まれます。例えば、PointerMoveEvent は追加の PointerEnterEventPointerLeaveEvent を生成できます。これらの追加イベントはキューに入れられ、現在のイベントが完了した後に処理されます。例えば、PointerMoveEventPointerEnterEvent イベントと PointerLeaveEvent イベントの前に処理を終了します。

イベントタイプのディスパッチ動作

各イベントタイプには独自のディスパッチ動作があります。各イベントタイプの動作は、2 つの段階に分かれます。

  • 下降伝播: 下降伝播の段階でエレメントに送信されるイベント。
  • 上昇伝播: 上昇伝播の段階で要素に送信されるイベント。

各イベントタイプのディスパッチ動作のリストについては、イベントリファレンスページを参照してください。

イベント伝播

イベントターゲットを選択すると、イベントディスパッチャーはイベントの伝播経路を計算します。伝播経路は、イベントを受け取るビジュアル要素が順序通りに並べられたリストです。伝播経路は次の順序で発生します。

  1. パスは、ビジュアル要素ツリーのルートから始まり、ターゲットに向かって下降します。これは下降伝播段階です。
  2. イベントターゲットがイベントを受け取ります。
  3. その後、イベントはルートに向かってツリーを上昇していきます。これは上昇伝播段階です。
伝播経路
伝播経路

ほとんどのイベントタイプは、伝播経路上のすべての要素に送信されます。いくつかのイベントタイプはバブルアップの段階をスキップし、いくつかのイベントタイプはイベントターゲットのみに送信されます。

要素を非表示または無効にするとその要素はイベントを受け取りません。要素を非表示または無効にしても要素の先祖や子孫にイベントが伝播されます。

イベントターゲット

あるイベントが伝播経路をたどると、Event.currentTarget はそのイベントを処理する要素に更新されます。イベントのコールバック関数の中には、ディスパッチの動作を記録する 2 つのプロパティがあります。

  • EventBase.currentTarget は、コールバックが登録されたビジュアル要素です。
  • EventBase.target は、イベントが発生する要素 (例: ポインター直下の要素) です。

イベントのターゲットは、イベントの種類によって異なります。ポインターイベントの場合、ターゲットは通常、ポインターの直下にある選択される可能性が最も高い要素です。キーボードイベントの場合、ターゲットは現在フォーカスされている要素です。

UI Toolkit のイベントには target プロパティがあり、これにはイベントが発生した要素への参照が含まれます。オペレーティングシステムから発生するほとんどのイベントでは、ディスパッチプロセスが自動的にイベントターゲットを見つけます。

ターゲット要素は EventBase.target に格納されており、ディスパッチプロセス中は変更されません。プロパティ Event.currentTarget は、現在イベントを処理しているビジュアル要素に更新されます。

選択モードとカスタムシェイプ

ほとんどのポインターイベントは、選択モードを使用してターゲットを決定します。VisualElement クラスには、以下の値をサポートする pickingMode プロパティがあります。

  • PickingMode.Position (デフォルト): 位置の矩形に基づいて選択します。
  • PickingMode.Ignore: ポインターイベントの結果として選択できないようにします。

VisualElement.ContainsPoint() メソッドをオーバーライドして、カスタム交差ロジックを実行できます。

追加リソース

イベントによる動作の制御
マニピュレーターによるポインターのキャプチャ