Quest3でSharedSpatialAnchorのサンプルプロジェクトを動かしてみる

はじめに

サークルのアドベントカレンダーに向けてひっさしぶりにブログ書きました!最近はQuest3を買ったのでMR開発にハマってます。
今回はMetaのShared Spatial Anchor(共有空間アンカー)のサンプルシーンの導入から実際に動かすまでをやっていこうと思います。 (さらに詳しい記事を現在執筆中...)

Shared Spatial Anchorとは

SharedSpatialAnchor(以下アンカー)を使うと、アンカーを絶対的な目印としてシーンにあるオブジェクトの位置を同じ空間にいる他の人と共有することができます。

サンプルの動かし方

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を貼り付けます

ビルド準備

  • BuildSettingsからAndroidにSwitch Platform

  • ProjectSettingsでAndroidのMinimamAPILevelを32以上に設定

ビルド

1. Oculus→OVRBuild→OVRBuildAPKからBuild
※バージョンコードが被ってるとアプリをアップロードできないのでAuto Incrementにチェックを入れておく

2. アプリケーションにアカウントを追加
もう一度Metaのアプリダッシュボードに移動して、リリースチャンネル>ALPHAを選択し、使っているQuestに入っているMetaアカウントを追加します。
※これをしないとアンカーをクラウド保存するために必要なユーザーIDの取得時にエラーがでます。

3. ビルドデータをアップロード
MetaQuestDeveloperHubを開いて、AppDistributionのUploadからAPKファイルをアップロードします。

サンプルシーンの操作

サンプルシーンではアンカーの保存、共有ができます。

メニュー

  1. Anchor Sharing Demoを選択
  2. 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の項目が追加されていたのでで、これからもっと簡単に使えるようになりそうです。この記事はほとんど公式ドキュメントの内容そのままでしたが、現在この機能を取り入れたゲームを開発しているので、もっと詳しい記事もこれから書こうと思ってます。(アドベントカレンダーの日までにまとめきれなかった...)

参考

共有空間アンカー | Oculus開発者

Meta QuestのShared Spatial Anchorsについて調査する - MRが楽しい

Shared Spatial Anchors Sample: Unity | Oculus Developers