MRが楽しい

MRやVRについて学習したことを書き残す

MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う その25(仮想オブジェクトを現実の部屋に干渉させる MetaXRSDKv67以降)

本日はMetaQuest3の技術調査枠です。
MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う手順を記事にします。
本記事はMetaXRSDKv67以降で仮想オブジェクトを現実の部屋に干渉させる手順です。

前提条件

本記事では以下の記事で作成したパススルーを有効にした Unity プロジェクトを基に設定を行います。
bluebirdofoz.hatenablog.com

シーンモデル

シーンモデルは MetaQuest3 で利用できる現実空間のモデルです。
ユーザが手動で床、天井、壁、机などのシーンアンカーを作成することで現実空間のオブジェクトを仮想空間に取り込むことができます。
シーンモデルの構築はルームの設定を利用することで実施することができます。
developer.oculus.com
developer.oculus.com

シーンモデルを利用する

シーンモデルをアプリで利用するには以下の作業が必要になります。
・シーン内にMRUKを設定する
・OVRManagerでシーンのサポートを必須に設定する

シーン内にMRUKを設定する

初めにシーン内にMRUKコンポーネントを配置します。
以下のMRUKプレハブをHierarchyにドラッグして配置します。

Package/MetaXRUtilityKit/Core/Tools/MRUK.prefab

今回は壁や床をパススルーで表示したまま当たり判定のみを設定するため、シーンの見た目を設定するEffectMeshコンポーネントを追加します。
以下のEffectMeshプレハブをHierarchyにドラッグして配置します。

Package/MetaXRUtilityKit/Core/Tools/EffectMesh.prefab

シーン形状の当たり判定を有効にするには[Colliders]にチェックを入れます。
シーン形状の見た目を非表示にするには[HideMesh]にチェックを入れます。

OVRManagerでシーンのサポートを必須に設定する

シーンのサポートを設定して空間情報へのアクセスを許可します。
QuestFeaturesの設定項目を開き、[Scene Support]の項目を[Required]に設定します。

更にOVR Managerコンポーネントの[Permission Requests On Startup -> Scene]にチェックを入れます。
これにより、起動時にシーンアクセスの要求が実行されて許可ダイアログが表示されるようになります。

重力を設定する

シーンの当たり判定が分かるように各オブジェクトに重力を設定します。
CubeオブジェクトとSphereオブジェクトにRigidbodyコンポーネントを追加しました。

ビルドと動作確認

これで設定は完了です。
以下の記事を参考にプロジェクトのビルドとQuest3へのデプロイを実行してください。
bluebirdofoz.hatenablog.com

MetaQuest3でデプロイしたアプリを起動します。
部屋のスキャンを未実施の場合、以下のスペース設定のダイアログが表示されるので[次へ]をタップします。

するとQuest3のセンサを利用した現実空間のスキャンが始まります。

案内に従い、部屋を歩き回り部屋の形状をスキャンしていきます。

一定の範囲を歩き回り、十分にスキャンを行うと以下の完了ダイアログが表示されるので[次へ]をタップします。

スキャンした形状から部屋の壁と認識する箇所の位置調整が求められます。
調整が完了したら[次へ]をタップします。

スキャンしたスペースを識別するための名前を選択します。
ここで選択した名前は[スペースの管理]一覧で表示されます。

これらの設定が終わると更に追加で机、ドア、窓などの設定を行うこともできます。
今回は壁と床の当たり判定が取れれば十分なのでこれで[完了]しました。

スペースの設定が完了すると、アプリが起動します。
物理空間が認識され、球体オブジェクトが床や壁に干渉するようになります。

過去バージョンの利用手順

MetaXRSDKのv67以降ではシーンモデルの利用スクリプトがUtilityKitに含まれています。
v66以前はOVRSceneManagerコンポーネントを利用する必要がありました。
過去バージョンでの利用手順の詳細は以下の記事を参照ください。
bluebirdofoz.hatenablog.com