便利なScripts(Components)
XR Interaction Toolkitには、知っておくと便利なコンポーネントが多数用意されている。
XR Input Modality Manager
ハンドトラッキングとコントローラーをシームレスに切り替えるためのマネージャー。
- 機能: ユーザーがコントローラーを置いた(または持った)ことを検知し、
Left/Right ControllerとLeft/Right Handの表示・アクティブ状態を自動で切り替えてくれる。 - 使い方:
XR Originにアタッチし、HandsとControllersの参照をセットするだけで動作する。これを入れないと、「コントローラーを持っているのに手も表示されている」といった重複表示が起きる。
Tracked Device Graphic Raycaster
VR空間内で「uGUI(Canvas)」を操作するために必須のコンポーネント。
- 機能: コントローラーから出るレイ(Ray)でボタンをクリックしたり、スクロールしたりできるようにする。
- 使い方:
- Canvasの
Render Modeを World Space に変更。 - CanvasオブジェクトにこのコンポーネントをAdd。
EventSystemにXR UI Input Moduleが設定されていることも確認する(これがないとクリックイベントが飛ばない)。
- Canvasの
XR Gaze Interactor
「視線」を使ってオブジェクトを選択・インタラクトするための機能。
- 機能: アイトラッキング(またはヘッドトラッキング)の方向にレイを飛ばし、オブジェクトを見つめるだけで選択したり、一定時間見つめて決定(Dwell)したりできる。
- 用途: 手を使えない状況や、補助的な入力手段として有効。
インタラクション関係の構成
XR Interaction Group
複数のインタラクター(Ray, Direct, Gazeなど)の優先順位を管理するコンポーネント。
- なぜ必要か: 「遠くの物はRayで掴みたいが、近くの物は直接手(Direct)で掴みたい」という場合、両方のインタラクターが同時に反応すると挙動がおかしくなる。Groupを使うことで「Directが有効ならRayを無効にする」といった排他制御が可能になる。
HMD設定の基本構造 (XR Origin)
Unity 2022/2023以降の一般的な XR Origin 階層構造の例。
XR Origin (XR Input Modality Manager)
├── Camera Offset
│ ├── Main Camera (Tracked Pose Driver)
│ ├── Left Controller (XR Ray Interactor, XR Poke Interactor...)
│ ├── Right Controller
│ ├── Left Hand (XR Hand Skeleton Driver...)
│ └── Right Hand
└── Locomotion System (Snap Turn, Teleportation Provider...) - Camera Offset: プレイヤーの身長や初期位置のズレを補正するための親オブジェクト。
- Hand Visualizer: デバッグ用や単純な手の表示用。実運用では
XR Hand Skeleton Driverを使ってリッチなメッシュを動かすことが多い。
TIPS / トラブルシューティング
- HMDに変な枠が表示される: ゲームビューの解像度設定がHMDと合っていない場合に発生することがある。
- UIが反応しない:
- Canvasに
Tracked Device Graphic Raycasterはついているか? - EventSystemに
XR UI Input Moduleはあるか? - CanvasのレイヤーがRay Interactorの
Raycast Maskに含まれているか?
- Canvasに
- 実行してもHMDに映らない: Unityエディタ上で「Gameウィンドウ」にフォーカスが当たっていない(隠れている)と、レンダリングが止まりHMD側が暗転したままになることがある。