本文へスキップ
バージョン: 3.4

共有オブジェクトの表示方法

これらのステップを踏むことで、同じShared ARエクスペリエンスで、同じ現実世界の場所にある同じオブジェクトを複数のユーザーに表示することができる。 また、プレーヤーの実世界のデバイス位置を追跡して、ターゲットとして使用したり、デバイス同士の相対的な位置を取得したり、プレーヤーのステータスを表示したり、エフェクトをかけたりすることもできます。

前提条件

  1. 共有AR体験の作成方法については、 How to Use Shared AR
  2. Unity ドキュメントの Get started with NGO の説明を読み、実行してください。
  3. Unityのドキュメントにある Object Spawning の説明を読んで実装してください。
  4. Unityのドキュメントにある、 Owner Authoritative Mode

共有ネットワークオブジェクトの表示

Object Spawnning を使用すると、Shared ARエクスペリエンスを使用している全員に同じ場所にオブジェクトを表示できます。 以下の手順に従ってください:

  1. NetworkObject コンポーネントを追加する代わりに、 LightshipNetworkObjectを追加する以外は、 Network Spawning Object をUnityに登録する手順に従ってください。 (これにより、 NetworkObjectも自動的に追加される)。

  2. NGO Objectと同じようにオブジェクトをインスタンス化し、スポーンします。

  3. インスタンス化され、スポーンされると、オブジェクトはシーン内の XR Origin > Trackables > Persistent Anchor > ARLocation > SharedArRoot の下に表示され、同じLightship Room内のすべての接続されたデバイス上のUnityシーンの Hierarchy に表示されます。

    共有ネットワークオブジェクト

デバイスポジションの同期

Owner Authoritative Mode を使用して、 NGO Object を使用し、ピアデバイスの位置を同期することができます。 これを利用して、選手のアバターを正しい位置に表示することができる。 以下の手順に従ってください:

  1. プレハブを作成し、 NetworkManager にプレーヤープレハブとして登録します。
  2. NetworkTransform を拡張する ClientNetworkTransform Component を、クライア ント権限を持つプレーヤ アバター用のプレーヤ プレハブに追加します。
  3. カメラのトランスフォームをコピーして位置トランスフォームを更新する NetworkBehaviour スクリプトをプレーヤープレファブに追加します:
    // Copyright 2023 Niantic, Inc. All Rights Reserved.

    using Unity.Netcode.Components;

    using UnityEngine;

    public class PlayerAvatar: NetworkTransform
    {
    [HideInInspector]
    private Transform _arCameraTransform;

    protected override bool OnIsServerAuthoritative()
    {
    return false;
    }

    public override void OnNetworkSpawn()
    {
    if (IsOwner)
    {
    if (Camera.main)
    {
    _arCameraTransform = Camera.main.transform;
    }
    }

    base.OnNetworkSpawn();
    }

    new void Update()
    {
    if (IsOwner)
    {
    if (_arCameraTransform)
    {
    // Get local AR camera transform
    _arCameraTransform.GetPositionAndRotation(out var pos, out var rot);
    // Since using the ClientNetworkTransform, just update world transform of the cube matching with the
    // AR Camera's worldTransform. it's local transform will be synced.
    transform.SetPositionAndRotation(pos, rot);
    }
    }

    base.Update();
    }
    }
  4. このサンプルをビルドし、2台のデバイスで同時に実行します。 セッション内の各デバイスにプレーヤープレファブが表示されるはずです。
備考

現在、すべてのメッセージは米国中部にあるサーバーを経由して中継されています。