見出し画像

Niantic Lightship ARDKのMultipeerNetworkingが提供する便利な機能

Niantic Lightship ARDK MultipeerNetworking について

Niantic Lightship ARDK の MultipeerNetworkingについては、以下にて説明しています。

Niantic Lightship ARDK MultipeerNetworking APIの便利な機能


MultipeerNetworking API には、セッションへの参加やメッセージ送信の機能に加えて、いくつかの追加機能があります。

Coordinated Clock

MultipeerNetworking の CoordinatedClockは、同じセッションにいるすべてのクライアントがアクセスできる、サーバー(ARBE: AR BackEnd)にバックアップされたミリ秒単位の時計情報です。

クライアントがセッションに参加すると、そのクライアントのローカルクロックは自動的にサーバークロックと同期を開始します。

この同期処理は、ネットワークの不具合によって、セッションに参加している各クライアントの時間のズレを回避するために必要です。CoordinatedClockはいったん同期されると、SyncStatusがStableに変わります。

CoordinatedClockのSyncStatusがStableに間、セッション内のすべてのクライアントのCurrentCorrectedTimeは、30ms以内の同期が保証されます。

CurrentCorrectedTimeは、ミリ秒単位のタイムスタンプなため、ストップウォッチやタイマーとして使用することを推奨しています。


using Niantic.ARDK.Networking;
using Niantic.ARDK.Networking.MultipeerNetworkingEventArgs;

...


private IMultipeerNetworking _networking;

void CreateAndJoinNetworking()
{
  // MultipeerNetworkingをインスタンスを生成
  var networking = MultipeerNetworkingFactory.Create();
  // 接続した時のイベント登録 
  networking.Connected += OnNetworkingConnected;
  
  // セッション識別子
  string sampleSessionString = "jp.co.1planet.ardk.multipeer.sampleapp";
  var sessionIdFromString = Encoding.UTF8.GetBytes(sampleSessionString);
      
  // セッションに参加
  networking.Join(sessionIdFromString);
  _networking = networking;
  return;
}

void Update()
{
    if (_networking == null)
    {
        return;
    }
    var cc = _networking.CoordinatedClock;
    Debug.Log(cc.SyncStatus + ":" + cc.CurrentCorrectedTime);

}

Persistent Key-Value Store

セッション内でキーバリューストアの共有用のデータオブジェクトを利用することができます。これは、セッションがアクティブである限り、いつでもアクセスすることができます。

セッションに参加するすべてのクライアントは、キーバリューストアの共有用のデータオブジェクトにアクセスすることができます。

キーバリューペアの設定
キーバリューペアは、文字列(キー)とbyte[](値)から構成されます。

void SetKeyValuePair(IMultipeerNetworking networking)
{
  string key = "my_key";
  byte[] value = new byte[10];
 
  // Stores the above data as a key-value pair on the server
  networking.StorePersistentKeyValue(key, value);
}

データの取得
データの登録や更新が行われるとPersistentKeyValueUpdatedのイベントが発行されます。

void SubscribeToKeyValueUpdates(IMultipeerNetworking networking)
{
  networking.PersistentKeyValueUpdated += OnPersistentKeyValueUpdated;
}
 
void OnPersistentKeyValueUpdated(PersistentKeyValueUpdatedArgs args)
{
  byte[] value = args.CopyValue();
  string key = args.Key;
 // Log some information about the key-value
  Debug.LogFormat
  (
    "Got a Persistet Key-Value. Key: {0}, Length: {1}",
    key,
    value.Length
  );
}

参考

最後に

OnePlanet XR

OnePlanet XR はAR/MR技術に専門特化したコンサルティングサービスです。豊富な実績を元に、AR/MR技術を活用した新たな事業の立ち上げ支援や、社内業務のデジタル化/DX推進など、貴社の必要とするイノベーションを実現いたします。
ご相談から受け付けております。ご興味ございましたら弊社までお問い合わせください。(以下にアクセスするとお問い合わせページに遷移されます。)

https://1planet.co.jp/xrconsulting.html

Niantic Lightship ARDK のブログ記事

この記事以外にNiantic Lightship ARDKのブログ記事を投稿しています。

OnePlanet Tech Magazine

Niantic Lightship ARDK以外のAR技術記事も定期的に投稿してます。