UI Toolkit は、イベントシステムを使用して入力を処理し、すべてのアクティブなパネルにイベントを送信します。このシステムは入力イベントを処理し、UI 内の適切な要素に送信します。
Unity には、古い機能の Input Manager と新しい Input System パッケージの 2 つの入力処理システムがあります。Input Manager は Unity プラットフォームの中心となる部分であり、Input System パッケージをインストールしていない場合は、デフォルトのシステムとして機能します。新しい Input System パッケージは、柔軟性を高め、幅広いデバイスとプラットフォームをサポートします。
UI Toolkit のイベントシステムは、両方のシステムからイベントを受信できます。システムは、アクティブな入力処理システムを自動的に検出し、それに応じてイベントを処理します。
プロジェクトでアクティブな入力処理システムを設定するには、以下のようにします。
Edit > Project Settings > Player を選択します。
Player ウィンドウの Other Settings > Configuration で、Active Input Handling を以下のいずれかに設定します。
対象のプロジェクトで Input System パッケージがアクティブになっている場合、UI Toolkit は、そのイベントを入力システムで定義されたアクションから自動的に派生させます。アクションを設定するには、Edit > Project Settings > Input System Package に移動します。
Input Manager による入力処理を設定するには、Edit > Project Settings > Input Manager に移動します。
Horizontal および Vertical の軸を設定することが可能ですが、これは UI Toolkit で NavigationMoveEvents がどのように生成されるかに影響します。Submit および Cancel のアクションを修正して、UI Toolkit で NavigationSubmitEvent および NavigationCancelEvents を生成することもできます。
Input System パッケージで入力処理を設定するには、Edit > Project Settings > Input System Package に移動します。
Input System パッケージは、Input Manager と比較してより高度な設定が可能です。プロジェクト全体のアクションアセットを使用して、UI Toolkit 向けにNavigationMoveEvents、PointerMoveEvent (“UI / Point” action)、PointerDownEvent、PointerUpEvent (“UI / Click”)、WheelEvent (“UI / ScrollWheel”)、NavigationSubmitEvent、および NavigationCancelEvent が生成される方法を設定することができます。
UI Toolkit の UI Document および uGUI のコンポーネントは同時に使用できます。異なる入力システムで UI Toolkit (および uGUI) を使用する場合は、適切な入力モジュールを選択する必要があります。
以下の表は、それぞれの入力システムの使用に必要なコンポーネントと設定の概要を示しています。
| 使用方法 | 必要なコンポーネント | Active Input Handling |
|---|---|---|
| 古い機能の Input Manager による UI Toolkit 要素 | デフォルトのイベントシステム (Scene コンポーネントは不要) | Input Manager (Old) |
| Input System パッケージによる UI Toolkit 要素 | デフォルトのイベントシステム (Scene コンポーネントは不要) | Input System Package (New) または Both |
| 古い機能の Input Manager による UI Toolkit 要素と uGUI コンポーネント | Standalone Input Module と EventSystem コンポーネント | Input Manager (Old) または Both |
| Input System パッケージによる UI Toolkit 要素と uGUI コンポーネント | Input System UI Input Module と EventSystem コンポーネント | Input System Package (New) または Both |
最初の uGUI 要素を Scene に追加すると、EventSystem および Standalone Input Module が自動的に Scene に追加されます。
EventSystem は uGUI に属しています。これは、置き換えが可能な Input Manager コンポーネントを通じて、古い機能の Input Manager または Input System パッケージのいずれかから派生した uGUI イベントに対応します。
Standalone Input Module は、イベントを UI Toolkit 要素にディスパッチします。
プロジェクトで Input System パッケージをアクティベートすると、Standalone Input Module の代わりに Input System UI Input Module が追加されます。Input System UI Input Module とそれに付随する EventSystem により、UI Toolkit と uGUI の両方の要素からのイベントが正しくディスパッチされるようになります。
EventSystem はシーンの読み込みとイベントの実行を担当します。Input System UI Module は入力を処理し、イベントの実行を開始します。Standalone Input Module または Input System UI Input Module を他の入力モジュールで変更することで、使用する入力の種類を変更できます。使用される入力モジュールに関係なく、すべてのイベントは EventSystem を通じて実行されます。
シーンで uGUI EventSystem を追加して有効にすると、UI Toolkit はそれを検出して、各 UI Toolkit パネルに対して 2 つの uGUI 互換コンポーネント (PanelRaycaster と PanelEventHandler) を作成します。これらのコンポーネントは、uGUI イベントと UI Toolkit イベントの間の仲介として機能します。これらのコンポーネントが存在する場合は、UI Toolkit のビルトインの自動入力処理が無効になります。つまり、これらのコンポーネントが存在する場合、UI Toolkit はこれらのコンポーネントを利用して入力イベントを処理します。
シーンで複数の Panel Settings アセットを使用している場合、イベントシステムは、ソート順に基づいてパネルにポインターイベントをディスパッチします。UI Toolkit は、パネルのソート順を uGUI キャンバスおよびその他の有効なレイキャストターゲットのソート順と比較することで、ポインターイベントの受信者を決定します。このプロセスにより、UI Toolkit 要素、uGUI オブジェクト、またはシーン内の別のオブジェクトがイベントを受信するかが決定されます。同様に、UI Toolkit は EventSystem の currentSelectedGameObject を使用してフォーカスを管理します。UI Toolkit パネルでフォーカスを取得したい場合は、他の uGUI オブジェクトからフォーカスを削除します。また、uGUI オブジェクトが選択されると、UI Toolkit パネルは自動的にフォーカスを失います。
ポインターイベントは、パネルがそれに応答するまでパネルを伝播します。イベントを使用してフォーカスされた要素に影響を与える最初のパネルが、イベントシステムにおいてフォーカスされたパネルになります。このパネルは、別のイベントによって違うパネルがフォーカスされたパネルになるまでキーボードイベントを受け取ります。
ノート: イベントの伝播を停止することと、要素にフォーカスすることは別のアクションです。例えば、ボタンをクリックすると伝播が停止し、そのボタンだけが押下に応答するようになります。ただし、ボタンやクリックされたフォーカス可能な要素にフォーカスが移動するなど、他のデフォルトのクリックアクションを妨げることはありません。