はじめに
こんにちは、エンジニアのクロ(@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を使用します。
Buildinig Blocksから
HandTracking
を追加アプリを起動
手の位置にメッシュが表示されます。簡単すぎる。
さらに、解説されているバージョンは異なりますが、こちらの記事を参考にすればものを掴む部分も実装できました。
Meta Quest開発 -Interaction SDKの使い方- | ドクセル
シーンの使用
次に、シーン(BuildingBlocks上ではRoom Model)を使用してみます。
シーンにはキャプチャとモデルの2つの機能があり、シーンキャプチャ機能でユーザーは現実の環境をキャプチャし、シーンモデルを生成できます。シーンモデルは現実のユーザー空間に対応したラベリングがつけられており、アプリからそれらにアクセスすることが出来ます。詳細は以下のリンクをご覧ください。
Unity Scene Overview: Unity | Oculus Developers
Quest3発売当初に天井や壁が崩れる表現が話題になりましたが、この機能を使っているのかなと思います。
というわけで実際の使用方法です。
Buildinig Blocksから
Room Model
を追加[BB]Camera Rig
のインスペクタからOVRManager > Quest Features > Scene SupportをSupported
かRequired
にします。アプリを起動します。
壁や天井が認識されています。簡単すぎる(2回目)
設定の読み込みはOVRSceneModelLoaderに実装されていますので、それを参考に実装して部屋の中心に表示することなども可能ですね。
おわりに
以上、簡単ではありますがBuilding Blocksという機能を使ってみました。
アプリを開発する際のセットアップは意外と面倒なため初心者が躓きがちなポイントかと思いますが、テンプレート化されて簡単に始めることができるようになったのは嬉しいですね。
開発を始めたいと思っている方の参考になれば幸いです。