本日は 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"); });