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

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

これらの手順により、Shared ARエクスペリエンスを使用している2人以上のユーザーから見えるように、同じオブジェクトを同じ現実世界の場所に表示することができます。 また、他のプレーヤーのデバイス位置との相対的なプレーヤーのデバイス位置を追跡して、ターゲットとして使用したり、プレーヤーのステータスを表示したり、エフェクトをかけたりすることもできます。

前提条件

  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. PlayerAvatar.cs Component that extends NetworkTransform を、クライアント権限プレーヤ アバター用のプレーヤ プレハブに追加します。
  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台のデバイスで同時に実行します。 セッション内の各デバイスにプレーヤープレファブが表示されるはずです。
備考

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