MRが楽しい

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

Meta QuestのShared Spatial Anchorsのドキュメントを読む

本日は Meta Quest の技術調査枠です。
Meta QuestのShared Spatial Anchorsのドキュメントページが日本語訳されていなかったので参照ページを翻訳しつつ読みました。

Shared Spatial Anchors

以下の Shared Spatial Anchors ドキュメントを日本語訳しています。
・Shared Spatial Anchors
https://developer.oculus.com/documentation/unity/unity-shared-spatial-anchors/

共有空間アンカー(Shared Spatial Anchors)

共有空間アンカーはあるユーザーが作成した空間アンカーを、同じ物理空間内にいる他のユーザーと共有することができます。
複数のユーザーで共有された物理世界に固定された参照フレームを作成することで、同じ場所でのマルチプレイヤー体験を構築することができます。
例えば、2人以上の人が同じテーブルに座り、その上で仮想ボードゲームをプレイすることができます。

OVRSpatialAnchor の Share メソッドを使用すると、空間アンカーのコレクションを共有することができます。

public static void Share(
	ICollection<OVRSpatialAnchor> anchors,
	ICollection<OVRSpaceUser> users,
	Action<ICollection<OVRSpatialAnchor>, OperationResult> onComplete = null)

空間アンカーは他のユーザーと共有する前に、クラウドストレージに保存する必要があります。
users パラメータには、アンカーを共有したい Meta Quest ユーザーのリストを指定します。
ユーザーは指定したアンカーをダウンロード、トラッキング、共有することができます。

共有操作は非同期です。
共有操作の完了を通知するデリゲートをオプションで指定することができます。

  • ICollection anchors: 共有する空間アンカーのコレクション。
  • ICollection users: 共有するユーザのコレクション。
  • Action onComplete: 操作が完了したときに呼び出されます。これは以下の2つの引数を取ります。

- ICollection: 共有する空間アンカーのコレクション。
- OperationResult: 共有操作に成功したか否かを示すエラーコード。

OVRSpatialAnchor.Share(anchorCollection, users, (anchors, result) =>
{
    ShowShareIcon = result == OperationResult.Success;
});

空間を共有するユーザー

空間アンカーを共有したいユーザのコレクションを指定する必要があります。
そのために、各ユーザーのメタクエストID(ulong識別子)からOVRSpaceUserを作成します。

var users = new OVRSpaceUser[]
{
  new OVRSpaceUser(userId1),
  new OVRSpaceUser(userId2),
};

OVRSpatialAnchor.Share(anchors, users, (anchors, result) => {
  Debug.Log(result == OperationResult.Success ? $"Shared with {users.Length} users!" : "Sharing failed");
});