Open9

【Unity】XR Interaction ToolkitでPCと接続したMeta Quest3のコントローラー入力を受け取る

ShitakamiShitakami

XR Interaction Toolkitに含まれるPrefab XR Origin (XR Rig)のコントローラーには ActionBaseController がアタッチされており、その中に各入力がBindされている。

そのまま ActionBaseControllerを使えばコントローラー入力を受け取れるのでは?

ShitakamiShitakami

アタッチされているXR Controller (action-based) の XRI Default Input Actions を覗いてみると UI PressTriggerButton が設定されていた。

ShitakamiShitakami

仮で以下のコードで動作確認してみる。

        [SerializeField] private ActionBasedController _xrController;
        
        public bool IsTriggerPressed()
        {
            var action = _xrController.uiPressAction.action;
            return action.triggered;
        }

追記 トリガー押下を検知できた。しかし、今回知りたいのは押している状態であって押した瞬間ではないので、もう少し調査する。

ShitakamiShitakami

余談になるが、Prefab XR Origin (XR Rig) には余計な機能がたくさんアタッチされている状態だったから削除した。
💭個人で何か作るときは、必要な機能は大体自分で作る派なのでいつも削除している気がする

  • XR Origin (XR Rig) にアタッチされている以下のコンポーネントを削除
    • Character Controller
    • Character Controller Driver
    • XR Gaze Assistance
  • Locomotionの削除
  • Left/Right Controller の子となるオブジェクト群の削除
    • Raycastなど
ShitakamiShitakami

https://zenn.dev/link/comments/cf90c58d0f704c

action.triggered から action.inProgress に変更することで、トリガーを押している状態を検知できた。

        [SerializeField] private ActionBasedController _xrController;
        
        public bool IsTriggerPressed()
        {
            var action = _xrController.uiPressAction.action;
            return action.inProgress;
        }
ShitakamiShitakami

一旦はここで終了とするが、また入力に困った場合はここに追記していく。