🙌

Meta Questで、Homeボタンを長押ししたときに正面をリセットする【XR Interaction Toolkit】

2023/01/07に公開

環境

  • Unity 2021.3.7f1
  • XR Interaction Toolkit 2.2.0
  • OpenXR 1.4.2

動作確認環境

  • メイン: Meta Quest 2 単機
  • サブ:
    • Meta Quest 2 * AirLink(PCVR) * UnityEditor
    • Valve Index * UnityEditor
    • Vive pro * UnityEditor

やりたいこと

  • AppLabやQuest Storeのリリース要件VRC.Quest.Functional.9に、OculusのHomeボタンの長押しで、正面をリセットするという要件があります。
  • 静止モード/歩行モードの両方のガーディアンのモードで実現したい

起きていた問題

  • 静止モードのガーディアンの時は、Homeボタン長押しで正面がリセットされるが、歩行モードの時はリセットされない
    • ちなみに、Quest 2 * AirLink(PCVR) * UnityEditorで、ホームボタンを押してから正面をリセットする(Oculus Rift用画面)と、歩行モードガーディアンだったとしてもリセットされた
  • ためしに他のQuest Storeアプリで検証してみたが、ガーディアンのモードに関係なくリセットされる(VRChat, Population: ONE, Amoung US VR)
  • よって、今開発中のアプリに何か問題がある。

原因と解決

  • XR Originコンポーネント > Tracking Origin Modeの設定が、DeviceではなくFloorになっていたことが原因だった
  • Deviceに変更したところ、両方のガーディアンのモードで正面がリセットされた
  • Tracking Origin ModeがFloorの場合、床が基準となり、床は自分がどの向きを向いても方向が変わらないため、Homeを長押ししても正面がリセットされない(というか、床の正面がリセットされているが床の向きは不変であるため見え方が変わらない、という感じだろうか)。だが、Deviceの場合は、その時のデバイスが向いている方向が正面となるため、リセットすると正面が変わるのだと推測される。
  • なお、ガーディアンが静止モードのときは、床という概念がないため、XR OriginでFloorに設定されていたとしても、Deviceと同じ挙動に自動的になっているのだと推測される
  • Tracking Origin Modeについて、Unity XR interaction Toolkit公式ドキュメントの記述

[!ノート] Device モードでは通常、XR ランタイムが空間内の固定位置 (開始時のヘッドマウントディスプレイ (HMD) の初期位置など) を基準として、追跡対象デバイスの位置を知らせます。このモードの場合は、XR Origin の Camera Y Offset を、Main Camera の地面からの高さに設定します。Floor モードでは通常、XR ランタイムはプレイヤーが立つ実際の床を基準として、追跡対象デバイスの位置を知らせます。このモードでは、必ずしも追跡の原点を人為的に上昇させる必要はないので、Camera Offset の高さは自動的に消去されます。デフォルトモードの XR ランタイムを使用するには、Not Specified モードに設定します。

他のデバイスでの検証

  • Meta Quest 2単機および、Quest 2 * AirLinkでは、設定を変更した後に体験しても挙動は問題なかったが、Valve IndexおよびVive Proでは問題があった。
  • Valve IndexとVive Proでは、現実世界での実際のHMDの位置より、アプリケーション内でのHMDの位置が低くなっている(Floorモードでは問題なかった)。よって、現実世界では直立しているのに、アプリケーション内のアバターは座っている、という挙動になってしまう。
  • 幸い現在作っているアプリケーションの中では、現実世界の自分がどんな高さにいても、その時点の自分の高さに合わせてアバターが直立した状態になるようにOffsetを調整する機能を作っているため、問題は隠蔽できる
  • 今後、この2つのデバイスの時には動的にTracking Origin Modeを動的に変更するなどの開発が必要な可能性あり。

参考

Discussion