MRが楽しい

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

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

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

前提条件

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

シーンモデル

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

シーンモデルを利用する

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

シーン内にOVRSceneManagerを設定する

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

Package/MetaXRCoreSDK/Prefabs/OVRSceneManager.prefab

今回は壁や床をパススルーで表示したまま当たり判定を設定するため、以下の通り OVRSceneManager コンポーネントを設定します。
・[Plane Prefab]に以下のInvisiblePlaneプレハブを設定する

PackageCache\Meta MR Utility Kit\Editor\BuildingBlocks\AnchorColliderSpawner/[BB] InvisiblePlane.prefab

・[Volume Prefab]に以下のInvisibleVolumeプレハブを設定する

PackageCache\Meta MR Utility Kit\Editor\BuildingBlocks\AnchorColliderSpawner/[BB] InvisibleVolume.prefab


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

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

これでシーンモデルを用いた当たり判定の設定は完了です。

サンプルの仮想オブジェクトを作成する

最後に当たり判定が機能していることを確認するための仮想オブジェクトをシーンに配置します。
Hierarchy上で右クリックから[3D Object -> Sphere]で球体オブジェクトを作成します。

PositionをX:0, Y:1, Z:1に設定して目の前に表示されるようにします。
更にRigidbodyコンポーネントを設定してオブジェクトが床に落下するようにしました。

更にMRTKのObjectManipulatorコンポーネントを設定するとオブジェクトを掴むことができるようになるので検証がしやすくなります。

ビルドと動作確認

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

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

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

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

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

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

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

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

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