折りたたみ式デバイス、タブレット、大画面など、さまざまなフォーム ファクタに対応する Android ゲームを開発する場合、プレーヤーは外部コントローラやゲームパッドを接続することがよくあります。タッチ操作やマウス操作向けに設計された UI 画面では、コントローラでメニューを操作するのが難しい場合があります。
通常、標準の D-pad ナビゲーションを中心に UI アーキテクチャを再設計すると、ユーザー
エクスペリエンスが向上しますが、既存のプロジェクトでは必ずしも実現可能とは限りません。代替オプションとして、Unity Input System
には VirtualMouseInput コンポーネントが用意されています。このコンポーネントを使用すると、接続されたゲームパッドまたはコントローラを使用して、画面上の仮想ソフトウェア
カーソルを操作できます。
VirtualMouseInput について
VirtualMouseInput コンポーネントは、Unity Input System
パッケージの高レベルのユーティリティで、ゲームパッドの入力を画面上のカーソル操作、UI
ポインタ操作、シミュレートされたタッチスクリーン イベントにブリッジします。有効にすると、次のようになります。
- 仮想マウス デバイスを作成する: 物理ポインティング デバイスとともに、ソフトウェアでシミュレートされたマウスを Unity Input System に登録します。
- ゲームパッドの操作をカーソル操作にマッピングする: アナログスティックまたは D-pad をバインドして画面上でカーソルを移動し、コントローラ ボタン(ボタン South / A など)をマッピングして、マウスの左クリック、右クリック、中クリックをシミュレートできます。
- Unity UI と統合する:
InputSystemUIInputModuleとシームレスに連携することで、ボタン、トグル、スライダーなどの標準 UI 要素は、ハードウェア マウスやタッチ操作と同じように仮想カーソルに応答します。 - ビジュアル カーソルを操作する: UI
Graphic(Imageコンポーネントなど)を割り当てて、画面上の仮想カーソルの位置を自動的に追跡してレンダリングできます。
仮想マウスと TouchSimulation を組み合わせる
ゲームがタッチスクリーン専用に設計され、直接タッチ スクリプトまたは API に依存している場合、仮想マウスはタッチスクリーン デバイスではなくマウス デバイスとして登録されるため、既存のタッチ検出ロジックは自動的にトリガーされません。
従来のタッチ
処理コードを書き換えることなく、ゲームパッドでカーソルを操作できるようにするには、Unity Input System's
TouchSimulation 機能と VirtualMouseInput を組み合わせて使用します。
- 仕組み:
TouchSimulation.Enable()を使用して有効にすると、Input System は、VirtualMouseInputで作成されたソフトウェアでシミュレートされたマウスなど、アクティブなマウス デバイスからのクリックとポインタの移動を、シミュレートされたタッチスクリーン イベントに自動的に変換します。 - データフロー: ゲームパッドのスティックとボタンの操作で仮想マウスを操作し、
TouchSimulationがシングルタッチ イベント(Touchscreen)に変換します。既存のタッチ検出スクリプトは、コードを変更せずにこれらのイベントをシームレスに処理できます。 - 考慮事項:
TouchSimulationは、シングルタッチ ポインタのエミュレーションに限定されます。ゲームプレイがピンチ操作や 2 本指回転などの複雑なマルチタッチ ジェスチャーに依存している場合は、ゲームパッド操作専用の入力アクション バインディングを構成する必要があります。
技術的な詳細、プロパティ、使用方法のドキュメントについては、
公式の UnityEngine.InputSystem.UI.VirtualMouseInput
と UnityEngine.InputSystem.EnhancedTouch.TouchSimulation
スクリプト リファレンスをご覧ください。