Building Blocksで始めるMetaQuest3 MRアプリ開発

はじめに

こんにちは、エンジニアのクロ(@kro96_xr)です。普段は主にサーバサイドエンジニアを担当しています。
今回は、Building Blocksという機能を使ってサクッとMetaQuest3上で動くMRアプリを開発してみたいと思います。

日本語に翻訳すると「積み木」ですが、積み木を積んでいくような感じで機能が実装できます。

開発開始

それでは開発していきましょう!
なお、Unityのインストールは済んでいる前提で、今回はUnity2022.3.10f1を使用していきます。

Questを開発者モードにする

まず、初期設定では自作アプリをQuest上で動かすことが出来ないため、Questの開発者モードをONにする必要があります。
スマホのMeta Questアプリからデバイスを選択して、ヘッドセットの設定>開発者モードの進むとONにできます。

プロジェクトの作成、設定

続いてプロジェクトを作成します。

Unity Hubを開いてプロジェクトの作成から3Dテンプレートを選んでプロジェクトを作成します。

プロジェクトが作成出来たら以下の設定を行います。

(1)File > Build Settings

  • PlatformからAndroidを選択
  • Texture CompressionをASTCに変更。

設定したらSwitch Platformをクリックします。

(2)Edit > Project Settings > Player > Other Settings

  • Color SpaceをGammaからLinearに変更
  • Configuration > Scripting BackendをMonoからIL2CPPに変更

SDKのインストール

注)Oculus Integrationがv59以降非推奨になるということで、今回ベータ版ですが個別機能のパッケージを使用しています。通常はOculus Integrationをインストールすれば良いと思います。

以下のAssetStoreからMeta XR Utilities SDKをMy Assetsに追加

Meta XR Utilities SDK | Integration | Unity Asset Store

Windows > Package Managerを開き、MyAssetsを開きインストール

統計情報を送るか聞かれるのでお好きな方を。その後Unityエディタを再起動するか聞かれるので再起動する。

シーンの設定

Oculus > Tools > Buildings Blocksをクリック

使用したいブロックをシーンにドラッグ&ドロップ、もしくはボタンをクリックすると機能が使用できます。

ベースとなるのがCamera Rigであり、パススルーを使用できるようにするのがBackgroud Passthroughです。
これらを追加すると、ヒエラルキーに[BB]CameraRig[BB] Background Passthroughが追加されます。
ついでに元々のサンプルシーンにあったMainCameraは消してしまって構いません。

CameraRigのインスペクタを見てみるとOVR Manager > TargetDevices > Quest3のチェックが外れているのでいれておきます。
また、OVR Manager > Tracking > Tracking Origin TypeはデフォルトでEye Levelになっていますが、床を原点にしたいのでFloor Levelに変えます。ここはアプリの内容に応じてお好みで。

ここまででカメラの設定とパススルーの設定は完了なのでとりあえず原点にCubeを置いてアプリを実行してみます。

アプリの実行

それではアプリを実行します。

まずMetaQuest3とPCをUSBケーブルで接続します。 次にFile > Build And Runをクリックして、ファイル名を適当にいれて保存するとアプリが起動します。

自分の足元にエディタ上で配置したCubeが表示されました。ひとまず動作するMRアプリ完成です。
用意されたテンプレートを組み合わせるだけで動かすことができました。簡単すぎて驚きました。

他の機能触ってみる

というわけでCubeだけ出していても面白くないので他の機能も入れてみます。

ハンドトラッキング

これまでと同様にBuildinig Blocksを使用します。

  1. Buildinig BlocksからHandTrackingを追加

  2. アプリを起動

  3. 手の位置にメッシュが表示されます。簡単すぎる。

さらに、解説されているバージョンは異なりますが、こちらの記事を参考にすればものを掴む部分も実装できました。

Meta Quest開発 -Interaction SDKの使い方- | ドクセル

シーンの使用

次に、シーン(BuildingBlocks上ではRoom Model)を使用してみます。

シーンにはキャプチャとモデルの2つの機能があり、シーンキャプチャ機能でユーザーは現実の環境をキャプチャし、シーンモデルを生成できます。シーンモデルは現実のユーザー空間に対応したラベリングがつけられており、アプリからそれらにアクセスすることが出来ます。詳細は以下のリンクをご覧ください。

Unity Scene Overview: Unity | Oculus Developers

Quest3発売当初に天井や壁が崩れる表現が話題になりましたが、この機能を使っているのかなと思います。

www.youtube.com

というわけで実際の使用方法です。

  1. Buildinig BlocksからRoom Modelを追加

  2. [BB]Camera RigのインスペクタからOVRManager > Quest Features > Scene SupportをSupportedRequiredにします。

  3. アプリを起動します。

  4. 壁や天井が認識されています。簡単すぎる(2回目)

設定の読み込みはOVRSceneModelLoaderに実装されていますので、それを参考に実装して部屋の中心に表示することなども可能ですね。

おわりに

以上、簡単ではありますがBuilding Blocksという機能を使ってみました。
アプリを開発する際のセットアップは意外と面倒なため初心者が躓きがちなポイントかと思いますが、テンプレート化されて簡単に始めることができるようになったのは嬉しいですね。
開発を始めたいと思っている方の参考になれば幸いです。