【Unity】XR Interaction ToolkitでPCと接続したMeta Quest3のコントローラー入力を受け取る
現代のVRデバイスのコントローラー入力の受け取り方が分からないので、調査備忘録をまとめる。
参考になりそうな記事: Unity VR開発メモ(XR Interaction Toolkit)
Unity VR開発メモ(XR Interaction Toolkit)のコントローラーの入力についてより、InputSystemを使用する模様。
現状のプロジェクトではXRのセットアップをしていたため、すでにマッピング自体は存在した。
XR Interaction Toolkitに含まれるPrefab XR Origin (XR Rig)
のコントローラーには ActionBaseController
がアタッチされており、その中に各入力がBindされている。
そのまま ActionBaseController
を使えばコントローラー入力を受け取れるのでは?
良くわからんので
XR Controller (action-based)
の公式ドキュメント: https://docs.unity3d.com/ja/Packages/com.unity.xr.interaction.toolkit@2.0/manual/xr-controller-action-based.html
アタッチされているXR Controller (action-based)
の XRI Default Input Actions を覗いてみると UI Press
に TriggerButton
が設定されていた。
仮で以下のコードで動作確認してみる。
[SerializeField] private ActionBasedController _xrController;
public bool IsTriggerPressed()
{
var action = _xrController.uiPressAction.action;
return action.triggered;
}
追記 トリガー押下を検知できた。しかし、今回知りたいのは押している状態であって押した瞬間ではないので、もう少し調査する。
余談になるが、Prefab XR Origin (XR Rig)
には余計な機能がたくさんアタッチされている状態だったから削除した。
💭個人で何か作るときは、必要な機能は大体自分で作る派なのでいつも削除している気がする
-
XR Origin (XR Rig)
にアタッチされている以下のコンポーネントを削除Character Controller
Character Controller Driver
XR Gaze Assistance
-
Locomotion
の削除 -
Left/Right Controller
の子となるオブジェクト群の削除- Raycastなど
action.triggered
から action.inProgress
に変更することで、トリガーを押している状態を検知できた。
[SerializeField] private ActionBasedController _xrController;
public bool IsTriggerPressed()
{
var action = _xrController.uiPressAction.action;
return action.inProgress;
}
一旦はここで終了とするが、また入力に困った場合はここに追記していく。