[Unity #15] XR Interaction ToolkitでVR移動とPC(WASD)操作を共通化する(Androidモジュール復旧編)

はじめに

最近、トラブルが多く、android関連のモジュールをインストール中にエラーが発生して、また復旧作業。
ただ、同じ事を繰り返してるので、流石に今回は短時間で解決しました。

コーディングや実装ではなく、Unity のシステム構造や内部構成に詳しくなってます。

今回は、VRとPCでの移動の両方に対応した実装をやってみたので、それを記事にまとめてみます。

前回の記事:

【Unity/VR】1つのスクリプトでVR移動とPC操作(WASD)を両立

VR開発(Meta Quest等)において、「実機確認は面倒だけど、PC上でサクッと動作確認したい」という場面は多いですよね。今回は、XR Interaction Toolkitを使用し、1つのスクリプトでVRのスティック移動とPCのキーボード操作を共存させる実装ガイドをまとめます。

1. 開発環境

  • Unity: 2022.3.62f3 (LTS)
  • XR Interaction Toolkit: (Starter Assets インポート済み)
  • Android Build Support: インストール済み

2. 移動スクリプト:PlayerMover.cs

カメラ(頭)の向いている方向に合わせて前後左右に移動する、シンプルなスクリプトです。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMover : MonoBehaviour
{
    [Header("移動速度")]
    public float speed = 2f;

    [Header("PC移動キー (WASD) / VR移動スティック")]
    public InputActionProperty moveAction;

    [Header("参照: カメラ (向いている方向に進む)")]
    public Transform headTransform;

    void Update()
    {
        Vector2 moveInput = moveAction.action.ReadValue<Vector2>();

        // 入力がない場合は処理しない
        if (moveInput.sqrMagnitude < 0.01f) return;

        // 頭の向き(Y軸回転のみ)を基準に方向を計算
        Vector3 forward = new Vector3(headTransform.forward.x, 0, headTransform.forward.z).normalized;
        Vector3 right   = new Vector3(headTransform.right.x, 0, headTransform.right.z).normalized;

        // 移動量の計算
        Vector3 move = forward * moveInput.y + right * moveInput.x;

        // 座標の更新
        transform.position += move * speed * Time.deltaTime;
    }
}

3. Unityエディタでのセットアップ

  1. コンポーネントの追加: XR Origin (XR Rig) に上記のスクリプトをアタッチします。
  2. カメラの紐付け: Head Transform 欄に、配下の Main Camera をドラッグ&ドロップします。
  3. アクションの指定:
  • Move Action の左側にある Use Reference にチェックを入れます。
  • 右側の欄(None)から XRI LeftHand Locomotion/Move を選択します。

4. 【重要】Input Actionの設定(PC対応)

デフォルトの Move アクションはVRスティック専用になっていることが多いため、以下の手順でキーボード入力を追加します。

  1. XRI Default Input Actions ファイルを開きます。
  2. XRI LeftHand Locomotion > Move アクションを選択します。
  3. 「+」ボタン から Add Up\Down\Left\Right Composite を選択し、名前を「Keyboard」にします。
  4. 各方向に W/A/S/D キーを割り当てます。
  5. 「Save Asset」 ボタンを押して保存します(これを忘れると反映されません!)。

5. 動作確認

  • VR: 左スティックを倒すと、向いている方向に移動します。
  • PC: Game画面を一度クリックした後、WASDキーで移動できます。

注意点: もしAndroidモジュールの不具合でビルド設定がおかしくなった場合は、Unity Hubから一度「Hubから削除」し、手動でフォルダを削除してから再インストールするのが確実です。

まとめ

この手法を使えば、VR実機を被ることなくPC上でデバッグが進められるため、開発効率が劇的に向上します。

Androidモジュール復旧

実装前に起こった、Androidモジュールのインストールエラーとその復旧についても情報をまとめておきます。

1. 発生した問題:

  • ビルド設定で「Android module not loaded」と表示され、モジュールを追加しようとしてもUnity Hubに「モジュールを加える」ボタンが出ない。
  • 手動でリストに追加しようとすると「エディターはすでにリストにあります」と拒否される「幽霊登録」状態。

2. 解決した手順(力技のクリーンインストール):

  • Unity Hubを完全に終了させる。
  • C:\Program Files\Unity\Hub\Editor 内の該当バージョンフォルダを手動で物理削除。
  • %AppData%/UnityHub のキャッシュを削除して「記憶」をリセット。
  • Hubからではなく、公式サイトの「ダウンロードアーカイブ」の Unity Hub ボタン経由で、Androidモジュールに最初からチェックを入れて再インストール。

3. 復旧後の確認:

  • Preferences > External Tools で、UnityがインストールしたJDK/SDK/NDKのパスが赤文字にならず、正常に紐付いていることを確認。