Unity でゲーム コントローラを使用して仮想マウスを操作する

折りたたみ式デバイス、タブレット、大画面など、さまざまなフォーム ファクタに対応する 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 GraphicImage コンポーネントなど)を割り当てて、画面上の仮想カーソルの位置を自動的に追跡してレンダリングできます。

仮想マウスと TouchSimulation を組み合わせる

ゲームがタッチスクリーン専用に設計され、直接タッチ スクリプトまたは API に依存している場合、仮想マウスはタッチスクリーン デバイスではなくマウス デバイスとして登録されるため、既存のタッチ検出ロジックは自動的にトリガーされません。

従来のタッチ 処理コードを書き換えることなく、ゲームパッドでカーソルを操作できるようにするには、Unity Input System's TouchSimulation 機能と VirtualMouseInput を組み合わせて使用します。

  • 仕組み: TouchSimulation.Enable() を使用して有効にすると、Input System は、VirtualMouseInput で作成されたソフトウェアでシミュレートされたマウスなど、アクティブなマウス デバイスからのクリックとポインタの移動を、シミュレートされたタッチスクリーン イベントに自動的に変換します。
  • データフロー: ゲームパッドのスティックとボタンの操作で仮想マウスを操作し、TouchSimulation がシングルタッチ イベント(Touchscreen)に変換します。既存のタッチ検出スクリプトは、コードを変更せずにこれらのイベントをシームレスに処理できます。
  • 考慮事項: TouchSimulation は、シングルタッチ ポインタのエミュレーションに限定されます。ゲームプレイがピンチ操作や 2 本指回転などの複雑なマルチタッチ ジェスチャーに依存している場合は、ゲームパッド操作専用の入力アクション バインディングを構成する必要があります。

技術的な詳細、プロパティ、使用方法のドキュメントについては、 公式の UnityEngine.InputSystem.UI.VirtualMouseInputUnityEngine.InputSystem.EnhancedTouch.TouchSimulation スクリプト リファレンスをご覧ください。