XR Interaction Toolkitを触ってみる(Oculus Quest,Valve Index Controller)
自身のUnityアプリ開発のための勉強としてXR-Interaction-Toolkit-Examplesを触ります。
開発環境
Unity 2021.3.15f1
XR-Interaction-Toolkit-Examples 2.0.4
OpenXR Plugin 1.5.3
【HMD】Oculus Quest(Quest2ではありません)
【VRコントローラー】Valve Indexコントローラー
【PCVR化ソフト】Virtual Desktop
【プレイエリア最適化用ソフト】OpenVR-SpaceCalibrator
(無線PCVRのキメラ環境です...)(うまくいくのかこれ...)
参考記事
以下の記事を参考に進めます。
目標
- コントローラーの入力に従ってVR空間内で移動する
- UIをレイキャストで操作する
セットアップ
- Unity Editorをインストールする
- Package ManagerからXR-Interaction-Toolkit-Examplesをインストールする
- Edit->Project Settings...->XR Plug-in Manegement->OpenXRをチェック
- ⚠が出た場合、アイコンをクリック
「少なくとも 1 つのインタラクション プロファイルを追加する必要があります。 [機能] メニューで、テストするコントローラーを選択してください。」 - EditをクリックしOpenXRのProject Settingsに移動する
- 今回はValve Indexコントローラーを使用するので、Interaction Profilesの+を押し「Valve Index Controller Profiles」を選択
XR Origin
VRカメラとプレイヤースペースを提供します.プレイヤーの視点!とその他いろいろの設定を定義する
XR Origin -> Camera Offset -> Main Cameraの3つで構成される
Input Action Manager の作成・移動動作の設定
VRコントローラーの入力を受け取るために、Input Action Managerを作成する。
- 空オブジェクトを作成
- GameObject内に「Input Action Manager」をアタッチ
Action Assetsの登録
Input Action Manager が受け取った入力データを、どこに保持するかを定める。
- Input Action Manager -> Action Assetsに、Input Action Assetを登録する。
Input Action Assetのテンプレートを確認する
Package Manager -> XR Interaction Toolkit -> Samples -> Starter Assetsをインストール
- Action Assetsに、XRI Default Input Actionsを登録する。
Locomotion Systemの作成
プレイヤーの移動をつかさどる「Locomotion System」を作成する。
XR Originと連携させることで、プレイヤーの移動をカメラの視点に反映させる。
動きの結果をXR Originに伝える機能があるだけで、これ単体では効果をなさない。
- Hierarchy右クリック/Create-> XR -> Locomotion System (Action-Based)を作成
- XR Originオブジェクトの子に作成すると良い。
- Locomotion Systemコンポーネント内の「XR Origin」にXR Originの付いたGameObjectをアタッチ
ターンの動きを作成(スナップターン・Snap Turn Provider)
素のLocomotion Systemは動きをXR Originに伝えることのみできる状態。回転・移動の動きは個別に作成しアタッチする必要がある。
何が入力されたら回転するのかを設定する
-
(XR Origin ->)Locomotion System -> Snap Turn Provider (Action-based) を確認
-
Assets/Samples/XR Interaction Toolkit/2.0.4/Starter AssetsにあるXRI Default Snap Turnを選択
-
XRI Default Snap TurnをSnap Turn Provider (Action-based)にドラッグ&ドロップ
- 自動でLeft (Right) Hand Snap Turn Actionが登録される
- ここへドラッグ&ドロップ↓
これが
こうなる
-
System フィールドがNone に変更されるため、同GameObject内にあるLocomotion Systemコンポーネントをアタッチする。
-
右手スティックを回転、左手スティックを移動として機能させたいので、左手の操作受付を削除する。
-
Left Hand Snap Turn Action -> Use Referenceのチェックを外す
-
Left Hand Snap Turn Action -> Use Referenceのチェックを外す
ターンの動きを変更(スムーズなターン・Continuous Turn Provider)
一定角度のターンからスムーズなターンの方式に変更する
VR視点には慣れている方なので、スムーズなターン の方式を実装する。
- Locomotion SystemのSnap Turn Provider (Action-based)コンポーネントを削除する。
- Add Componentボタンから、Continuous Turn Provider (Action-based)コンポーネントを追加する。
- Assets/Samples/XR Interaction Toolkit/2.0.4/Starter Assets/ にある、
XRI Default Continuous Turn.presetをContinuous Turn Provider (Action-based)の名前の部分にドラッグ&ドロップ - コンポーネント内の、Left Hand Snap Turn Action -> Use Referenceのチェックを外す
- Systemフィールドに、同GameObject内にあるLocomotion Systemコンポーネントをアタッチする。
Turn Speedフィールドの数値
Turn Speedフィールドの値を変えると、1秒間に回転する角度を変更できる。(1秒間に○○°回転する)
今回は1秒間に60°回転させる設定にする。
Systemフィールドの設定忘れがち...
移動の動きを作成(Continuous Move Provider)
上記ターン操作の設定とほとんど同じ。
- Locomotion System に Continuous Move Provider (Action-based) をアタッチ
- Assets/Samples/XR Interaction Toolkit/2.0.4/Starter Assets/ にある、
XRI Default Continuous Move.preset をContinuous Turn Provider (Action-based)の名前の部分にドラッグ&ドロップ - 左スティックで移動したいので、Continuous Move Provider の「Right Hand Move Action」のチェックを外す
- Systemフィールドに、Locomotion Systemをドラッグ&ドロップ。
移動速度の設定
Move Speedフィールドの値を変えることで、1秒間に移動する距離を設定できる。
1と入っていれば、1秒間に1メートル移動する。
今回は秒速2メートルに設定する。
当たり判定を作成する
オブジェクトをすり抜けたりしないよう当たり判定を作成する。
- XR Origin に、「Character Controller」をアタッチする。
-
Locomotion System に、「Character Controller Driver」をアタッチする。
- このドライバーがあることで、ヘッドセットの高さに合わせて、当たり判定が調整される。
移動・回転操作実装おわり
一旦Virtualモーションキャプチャーの記事へ戻る
次の目標
バーチャルモーションキャプチャーのアバターの移動と視点移動を両方実現する。