Quest3でSharedSpatialAnchorのサンプルプロジェクトを動かしてみる
はじめに
サークルのアドベントカレンダーに向けてひっさしぶりにブログ書きました!最近はQuest3を買ったのでMR開発にハマってます。
今回はMetaのShared Spatial Anchor(共有空間アンカー)のサンプルシーンの導入から実際に動かすまでをやっていこうと思います。 (さらに詳しい記事を現在執筆中...)
Shared Spatial Anchorとは
SharedSpatialAnchor(以下アンカー)を使うと、アンカーを絶対的な目印としてシーンにあるオブジェクトの位置を同じ空間にいる他の人と共有することができます。
Shared Spatial Anchors are now supported on Meta Quest 2, PC Link, and Meta Quest Pro, enabling you to build local multiplayer experiences that reach an even wider audience and bring more people together in VR. Get started with Shared Spatial Anchors ➡️ https://t.co/g8NJafGhzH pic.twitter.com/ygzfHsHVvV
— Oculus Developers (@Oculus_Dev) 2023年2月7日
サンプルの動かし方
Metaの公式ドキュメントを参考にしながらやっていきます。
Shared Spatial Anchors Sample: Unity | Oculus Developers
サンプルのダウンロード
Unityバージョン:2020.3.42f
- Android Build Surportが必要
↓のGithubページからcloneしてください。
https://github.com/oculus-samples/Unity-SharedSpatialAnchors
プロジェクトをMetaの開発者ダッシュボードに登録
アンカーをクラウドに共有するためにアプリデータをDeveloperDashboardに登録する必要があります。(アカウントを持ってない場合は登録してください)
Oculus Developer Center | Authenticate
1. マイアプリから「新しいアプリを作成」を選択
2. アプリ名を決めてMeta Quest(App Lab)を選択
3. UserIDとUserProfileを追加してリクエストを送信
おそらく個人的に使う分には申請が拒否されたり承認に時間がかかったりはしないです。
4. 最後にAPIに移動してアプリIDをメモ
Photonのアプリケーションを作成
サンプルではPUN2という、ネットワーク機能を実装できるライブラリを使ってオブジェクトの同期を行っています。
Photonのアカウントを持っていない場合は登録しましょう。(https://www.photonengine.com/ja-jp)
登録したらダッシュボードに移動してPUN2用アプリケーションを作成します。
PUN2を選択
オブジェクト同期の機能のために使っているだけなので、実際に開発するときはPhotonFusionなどでも大丈夫です。
アプリケーションを作成したら、先程と同じ用にアプリIDをメモしておきます。
Unityエディタでの設定
Unityプロジェクトを開いたらAssets/SharedSpatialAnchors/Scenesの中のSharedSpatialAnchorシーンを開きます。
OVRManagerの設定
まずヒエラルキー上のOVRCameraRigにアタッチされているOVRManagerのインスペクタを設定します。
- Tracking Origin Type: STAGE
- Anchor Support: Enabled
- Shared Spatial Anchor Support: RequiredまたはSupported
- Passthrough Capability: Enabled
AndroidManifest.xmlの追加
[Oculus] -> [Tools] -> [Create store-compatible AndroidManifest.xml]を選択します
MetaアプリIDの指定
[Oculus] / [Platform] / [Edit Settings]に移動します。
- [Meta Quest2/Pro]に先程メモしたMetaのアプリIDを指定します。
- Quest Linkをテストする場合は、[Oculus Rift]の方にもアプリIDを入れます。
- [Build Settings]の下で、Bundle Identifierを(com.yourcompany.ssa_sampleなど)置き換えます。
PhotonのアプリIDの設定
[Window] > [Photon Unity Networking] > [Highlight Server Settings]を開きます。
先程メモしたPhotonのアプリIDを貼り付けます
ビルド準備
- Keystoreを設定(参考↓)
Unity AndroidのKeyStore作成手順
ビルド
1. Oculus→OVRBuild→OVRBuildAPKからBuild
※バージョンコードが被ってるとアプリをアップロードできないのでAuto Incrementにチェックを入れておく
2. アプリケーションにアカウントを追加
もう一度Metaのアプリダッシュボードに移動して、リリースチャンネル>ALPHAを選択し、使っているQuestに入っているMetaアカウントを追加します。
※これをしないとアンカーをクラウド保存するために必要なユーザーIDの取得時にエラーがでます。
3. ビルドデータをアップロード
MetaQuestDeveloperHubを開いて、AppDistributionのUploadからAPKファイルをアップロードします。
サンプルシーンの操作
サンプルシーンではアンカーの保存、共有ができます。
メニュー
- Anchor Sharing Demoを選択
- Create New Roomを選択(二人目の入室時はJoinRoom)
メインUI(左手)
- Toggle Anchor Creator:アンカー作成モードに切り替え
- Load Local Anchors:ローカルに保存されているアンカーをロードしてインスタンス化
- Spawn Networked Cube:ネットワークで同期されるCubeを生成(他のプレイヤーと共有される)
アンカーUI
- Save Anchor Locally: アンカーをローカルに保存
- Hide Anchor:シーンからアンカーを削除(ローカルに保存されている場合はもう一度読み込めば復活)
- Erase Anchor:アンカーをシーンから削除し、さらに、ローカルに保存されているアンカーデータも削除。
- Share Anchor:ルームに接続している他のすべてのユーザー、ルームに新たに参加するユーザーとアンカーを共有
- Align to Anchor:アンカーとの位置関係を元にプレイヤーの位置合わせをする。ネットワークで同期されているオブジェクトは全プレイヤーから同じ位置に表示される。
注意点
ビルドしないとアンカーをクラウドに保存できない
- 実機じゃないとMetaのユーザー情報が取得できないため、QuestLinkなどでのデバッグはできません。(Linkではアンカーの配置とローカルへの保存のみ可能)
- このサンプルではできませんが、最新のMeta XR Simulatorではデバッグ用のMetaアカウントにログインしてくれたりするのでわざわざ実機にビルドしなくてテストできます。
複数アカウントでテストする場合はMetaアプリのダッシュボードのリリースチャンネルからユーザー追加するのを忘れない
- そもそもMetaQuestDeveloperHubからインストールする必要があるのでユーザー追加は必須です
- テストアカウントでも動きます
クラウドに保存してもアプリを終了したら消える
- もしアンカーを保持したい場合はローカルに保存しましょう
まとめ
SharedSpatialAnchorに関するドキュメントが少なかったのでかなり苦戦しました。まだ触ってないですが、最近BuildingBlocksにSharedSpatialAnchorの項目が追加されていたのでで、これからもっと簡単に使えるようになりそうです。この記事はほとんど公式ドキュメントの内容そのままでしたが、現在この機能を取り入れたゲームを開発しているので、もっと詳しい記事もこれから書こうと思ってます。(アドベントカレンダーの日までにまとめきれなかった...)