Open15

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のキメラ環境です...)(うまくいくのかこれ...)

参考記事

以下の記事を参考に進めます。
https://note.com/suzuran_amano/n/nc46632cdccf9#4dfa6509-c21f-4fdc-8df6-51546c7488c2
https://note.com/suzuran_amano/n/n01e5a465d05e
https://tech.framesynthesis.co.jp/unity/xr/
https://gaprot.jp/2021/03/30/xr-interaction-toolkit/
https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.0/manual/samples.html#starter-assets

ふぁゔふぁゔ

目標

  • コントローラーの入力に従ってVR空間内で移動する
  • UIをレイキャストで操作する
ふぁゔふぁゔ

コントローラーの入力に従ってVR空間内で移動する

Input Action Manager、Locomotion System、Snap Turn Provider (Action-based)/Continuous Turn Provider (Action-based)で実現

ふぁゔふぁゔ

セットアップ

  • 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を登録する。
ふぁゔふぁゔ

リリース版でサンプルの名前が変わっていた

参考記事のInput Action Assetのサンプルの名前は「Default Input Actions」となっていたが、
XR Interaction Toolkitのリリース版(ver 2.0.4)ではサンプルの名前がSterter Assetsに変わっていた。

ふぁゔふぁゔ

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のチェックを外す
ふぁゔふぁゔ

ターンの動きを変更(スムーズなターン・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°回転させる設定にする。

ふぁゔふぁゔ

移動の動きを作成(Continuous Move Provider)

上記ターン操作の設定とほとんど同じ。

  • Locomotion SystemContinuous 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モーションキャプチャーの記事へ戻る

次の目標

バーチャルモーションキャプチャーのアバターの移動と視点移動を両方実現する。