最近、Vision ProやMeta Questを色々触っています。今回はMeta Questで位置情報を取得する手順をまとめました。
環境
・Windows 11 (ただし、MacのParallel Desktop)
・Unity 2022.3.34f1
・Meta XR Core SDK 65.0.0
・Meta Quest2
1. 前提
1.1 MetaQuestで位置情報が使えることは公式HPで明記されている
位置情報サービスをオンにすると、Meta Questデバイスとデバイス上の個々のアプリが位置関連情報にアクセスできるようになります。これを許可することで、Meta QuestデバイスとアプリはクラウドソーシングされたWi-Fiアクセスポイントなどの情報源を使用して、そのデバイスの位置を特定します。いつでも位置情報サービス設定を確認して、希望の設定が選択されているかを確認できます。
Meta Quest自体にはGPSはないようですが、WiFiアクセスポイントなどから位置情報を取得できるようです。
1.2. UnityではLocation Serviceという仕組みで位置情報を取得できる
こちらに書いてあります。
Unity - Scripting API: LocationService.Start
MetaQuest=Androidですが、AndroidManifest.xmlの編集などは不要でした。
2. 位置情報を表示するアプリの開発方法
環境構築については、こちらの「環境構築」に書かれている内容と同じ手順なので割愛します。
Project SettingsのFix allの後は以下2つのエラーが残りました。
Either the Oculus XR or OpenXR Plugin package must be installed through the package manager The XR plug-in management package must be installed
そこで、もう一度Package ManagerでUnity Registryに変更してから、Oculus XR Pluginをインストールすると、エラーが消えました。
続けて、新規シーンをつくってMain Cameraを削除、Oculus > Tools > Building BlocksでCameraRigとControllerをHierachy Viewにドラッグします。
さらに、Hierarchy Viewで右クリック、 UI > Canvasを選択してCanvasを表示します。CanvasのInspectorにあるRender ModeをWorldにします。
Canvasの上で右クリック、 UI > TextMeshProを選択します。右下にTextMeshProのウインドウが出るので、Import TextMeshPro Essential のようなボタンをクリックすると、New Textという文字がCanvas上に見えるようになります。
OVRCameraRigより前にCanvasを移動させて、VRアプリ実行時にNew Textが見えるようにしておきます。
次に緯度経度を表示させます。こちらの記事をほぼそのまま活用させていただきました。iOS/Android向けの内容ですが、VRでも使用できました。
Hierarchy ViewでEmpty Objectを2つ生成し、LocationRenderとLocationUpdaterという名前にします。
それぞれ以下のスクリプトをアタッチします。
LocationRenderオブジェクトのInspectorにLocationUpdaterオブジェクト、Canvas/Text(TMP)をアタッチします。
全て完成するとこのようになります。
Editor実行して表示が変わることも確認できます。
3. Meta Questデバイスにビルドして確認
UnityのBuild SettingsはDefault Companyの部分だけ変更し、ビルドを開始します。初回は10分以上かかりましたがapkが生成されます。
PCとデバイスをType-Cで接続し、Meta Quest Developer Hub をつかって実機に転送します。
また、Questデバイスの設定アプリ > アプリのアクセス許可 > オフになっている設定をonに変更します。Meta Questデバイスでは、基本は位置情報の取得機能がオフになっているためです。
あとは実機に転送したアプリを実行すると、現在位置がテキストで表示されます。(しばらくInitializingになってからRunningになりました)
4. おわりに
同じ話題をフォーラムで何件か見つけたのですが、なぜかほとんどリプライなしで止まっていました。
もしかして出来ないのかと思いましたが、結果的には特別なことなくできました。UnityとVRも最近調べているので、また何か見つけたら更新します。