仮想コンテンツを配置する

次の情報を参照して、共有AR体験において仮想コンテンツを配置し、方向を合わせる方法を理解する。

ピアのポーズ

ARNetworking セッションでは、すべてのピアが自身の座標系で開始します。この際、 ARSession の実行を開始した時点のデバイスの位置が原点(0,0,0)になります。位置が安定すると、ピアのポーズはホストの座標系にスナップされます。

デフォルトでは、安定したピアはすべて、他のすべてのピアに自分のポーズをブロードキャストします。ポーズのブロードキャストは、アプリケーションの要件に基づいて設定できます。

using Niantic.ARDK.AR.Networking;

IARNetworking arNetworking;

// To enable
arNetworking.EnablePoseBroadcasting();

// To disable
arNetworking.DisablePoseBroadcasting();

// To configure how often poses are broadcast
arNetworking.SetTargetPoseLatency(latency);

各ピアで利用可能な最新のポーズは、IARNetworkingインターフェイスを使用して取得できます。

var allPeerPoses = arNetworking.LatestPeerPoses;
var myPeerPose = arNetworking.ARSession.CurrentFrame.Camera.Transform;

また、ローカルデバイスのポーズを含め、ピアのポーズのアップデートをサブスクライブすることもできます。

using Niantic.ARDK.Utilities;

IARNetworking _arNetworking;
Dictionary<IPeer, GameObject> _peerGameObjects;

void SubscribeToPeerStateUpdates()
{
  _arNetworking.PeerPoseReceived += OnPeerPoseReceived;
}

void OnPeerPoseReceived(PeerPoseReceivedArgs args)
{
  var peer = args.Peer;
  var pose = args.Pose;

  // Use this information to attach a GameObject to a player,
  // have in-game characters look at a player, have an AI
  // shoot at a player, etc.
  var peerGameObject = _peerGameObjects[peer];
  peerGameObject.transform.position = pose.ToPosition();
  peerGameObject.transform.rotation = pose.ToRotation();
}

共有世界に仮想コンテンツを配置する

ARSession を使用する場合、原点(0,0,0)はセッションが実行されたときのデバイスの元の位置になります。1ユニット(Unity空間)は、現実世界ではおよそ1メートルに相当します。

ARNetworking セッションを通じてAR空間を接続した場合、初期状態ではプレイヤーごとに座標系が割り当てられており、この座標系は起動時の位置に相当します。各プレイヤーの仮想環境における位置(X,Y,Z)に配置されているオブジェクトは、現実世界ではプレイヤー全員の同一の位置に表示されるわけではありません。

ただし、ローカライゼーションが完了すると、非ホストのデバイスの位置は、ホストの座標系の相対位置に相当する新しい位置に「移動」します。この時点では、すべてのクライアントが同一の座標系(ホストの座標系)を使用しており、仮想オブジェクトの位置(X,Y,Z)に配置すると、現実世界でも全員に同様に表示されます。