本文へスキップ

共有ARのデバッグ方法

デバッグ・ネットワーク

共有ARは、マルチプレイの複雑さとARの複雑さを一緒にしてしまうので、共有ARのデバッグはかなり面倒になる。 例えば、開発中に問題をデバッグするために、複数のデバイスや複数のUnityエディタのインスタンスを開く必要があります。 マルチプレイヤーは、シングルデバイスのアプリケーションと比較して、レースコンディションやタイミング関連の問題を引き起こす可能性もある。 このHow-Toは、共有AR体験をデバッグするためのヒントを共有し、ARマルチプレイヤーアプリケーションのトラブルシューティングとデバッグのためのガイドとなります。 使えるテクニックは3つある:

  • PlaybackとParrelSyncによる複数のUnity Editorインスタンスでのデバッグ
  • Unityエディタとデバイス間のデバッグ
  • デバイスのデバッグ

前提条件

このハウツーには以下が必要です:

  1. Netcodeを使用したVPSコロカライゼーションの使用方法」または「Netcodeを使用した画像トラッキングコロカライゼーションの使用方法」のいずれかを修了していること。
  2. 再生準備完了。
  3. お使いのマシンにインストールされているParrelSync

UnityエディタでPlaybackとParrelSyncを使ってデバッグする

ParrelSyncはUnityエディタの拡張機能で、2つ目のUnityエディタウィンドウを開き、元のプロジェクトからの変更をミラーリングすることで、ユーザーはプロジェクトをビルドせずにマルチプレイヤーゲームプレイをテストすることができます。

  1. ParrelSyncメニューからクローンマネージャーを開きます。 クローンマネージャーで 新規クローンの作成をクリックし、クローンプロジェクトを作成します。 完成までには時間がかかるかもしれない。
  2. をクリックし、クローンされたプロジェクトを開きます。 オリジナルのプロジェクトが変更されると、クローン化されたプロジェクトにも最新の情報が反映される。
  3. 複数のエディタでプロジェクトをプレイモードで実行します。 すべてのインスタンスはセッションに参加し、コロカライズする必要がある。 両方のインスタンスが同じルームに接続されていることを確認してください。
デバッグ・ネットワーク

Unityエディターとデバイス間のデバッグ

ARトラッキングはUnityエディタでは完全には動作しませんが、Unityエディタとデバイス間で共有ARをテストすることは、物理デバイス上でAR Multiplayerを実行しながらステートとシーン階層を検査するのに便利です。 ARDKはまた、Unityエディタとデバイス間のテストやデバッグを行うための「モックコローカライゼーション」モードもサポートしています。 このモードはネットワーク機能にのみ適用される。

  1. HierarchyXR Origin を選択します。 Inspector ウィンドウで、 Shared Space Manager コンポーネントを見つけ、 Colocalization Type を選択し、 MockColocalizationを選択します。

    コロカライゼーションタイプの選択
  2. スクリプトで、 MockColocalization 設定をテストし、独自のペイロード値で部屋をセットアップします。 使用例:

    if (_sharedSpaceManager.GetColocalizationType() ==
    SharedSpaceManager.ColocalizationType.MockColocalization)
    {
    // Set room to connect
    var mockTrackingArgs = ISharedSpaceTrackingOptions.CreateMockTrackingOptions();
    var roomArgs = ISharedSpaceRoomOptions.CreateLightshipRoomOptions(
    "TestRoom",
    32,
    "Test room using mock colocalization"
    );
    _sharedSpaceManager.StartSharedSpace(mockTrackingArgs, roomArgs);
    }.
  3. シーンを開始すると、アプリはデバイスとエディターの両方で、ホストかクライアントを選択するUIに直行するはずです。

デバイスのデバッグ

共有ARサンプルのダウンロードとインストール方法については、 Sample Projects を参照してください。

共有ARオリジンを示すことによるコロカライゼーションのデバッグ

共有AR原点があるシーンに立方体を置く:これは、コロカリゼーションフローで以下を確認するのに有効なテクニックです:

  • VPSおよび/またはイメージ・トラッキングが機能している
  • 現実世界におけるシェアードARの原点はどこにあるのか
  • VPSにおける位置と回転の精度、および/または装置間の画像トラッキング

永続アンカーの位置や回転がデバイス間で異なる場合、それらのデバイスが同期していないことがわかります。 アンカーが正しい位置(および向き)にあるにもかかわらず、ネットワーク・オブジェクトが正しく配置されていない場合、デバイスは同期しているが、ネットワーク・オブジェクトが同期して配置されていないことがわかります。

立方体をアンカーとして使うことで、アンカーの回転を検出しやすくなる。 Assets/Samples/SharedAR/Prefabsの共有ARサンプルに、 OriginVisualizer というプレハブがあります。

共有ARプレハブ

アンカー位置にプレハブを表示するには、SharedSpaceManagerのトラッキングイベントハンドラに以下のスクリプトを追加します。

[SerializeField]
private SharedSpaceManager _sharedSpaceManager;

[SerializeField]
private GameObject _sharedRootMarkerPrefab;

private void OnColocalizationTrackingStateChanged(SharedSpaceManager.SharedSpaceManagerStateChangeEventArgs args)
{
if (args.Tracking)
{
Instantiate(_sharedRootMarkerPrefab,
_sharedSpaceManager.SharedArOriginObject.transform, false);
}.
}
共有ARルートを表示

ネットワーク統計

ネットワーク統計の把握は、レイテンシーや接続の問題など、マルチプレイの問題を分析するのに大いに役立つ。 SharedAR パッケージには、 LightshipNetcodeTransportStatsUI プレハブがあり、ホストまでの RTT、送信データ量、メッセージ数などのネットワーキング統計情報を UI パネルで提供します。 プレハブは Packages/Niantic Lightship Shared AR Client Plugin/Assets/Prefabsにあります。

LightshipNetcodeTransportStatsUI を有効にします:

  1. プレハブを Canvas オブジェクトに追加します。 キャンバスは、メインメニューから GameObject > UI > Canvas (キャンバスを持っていない場合) を選択することで開始できます。

  2. プレハブの Inspector ウィンドウの Lightship Netcode Transport Stats Display にアクセスします。

    1. Lightship Netcode TransportNetworkManager (Lightship Netcode Transport)に設定されていることを確認してください。
    2. Text プロパティを使って、別のテキスト・オブジェクトを指定することもできます。
    3. Bg Image プロパティを使用して、新しい背景画像オブジェクトを選択します。 画像 コンポーネントを使用して、現在の画像を修正します。
    4. 新しいボタンオブジェクトを選択するには、 Button プロパティを使います。 現在のボタンを変更するには、 Button コンポーネントを使用します。
    5. サンプルレートを変更するには、 Sample Rate in Secondsを更新します。 デフォルトは1サンプル/秒。 サンプルレートが高くなると、ネットワークのパフォーマンスが低下する可能性があります。
    6. Verbose Text のチェックボックスをオン/オフして、ネットワーキング・パネルの詳細レベルを変更する。 通常のテキストと冗長なテキストは次のようになります。
    Regular Text
    Regular Text
    Verbose Text
    Verbose Text

トラブルシューティング

接続失敗

  • 有効なAPIキーが設定されていることを確認する。
  • 選手数が会場の収容人数以下であることを確認してください。 ISharedSpaceRoomOptions.CreateVpsRoomOption()またはISharedSpaceRoomOptions.CreateLightshipRoomOptions()を呼び出すと、部屋の収容人数が設定されます。
  • 一人のプレイヤーがホストとして開始し、残りのプレイヤーはクライアントとして参加したことを確認する。
  • 現在、ユーザーが明示的にLeave()関数を何度も呼び出さずにルームから退出すると、ルームが結合不能になる既知の問題があります。 RoomManagermentService.DeleteRoom()を呼び出してルームを削除するか、別のルームを使用する必要があります。 Netcodeを使用している場合、SharedSpaceManagerと LightshipNetcodeTransportが破壊されたとき(シーンを離れるときなど)に、自動的にRoomから退出する。

予期せぬ切断

  • デバイスのネットワーク接続(無線LAN、モバイルネットワーク)を確認します。
  • 現在のところ、接続を維持できる最大時間は30分となっている。 30分後に自動的に切断される。

メッセージが届かない

  • INetworking.SendData()の最大ペイロードサイズは約1KBであり、これを超えるとメッセージは送信されない。 ネットコードを使用する場合、ペイロードはネットコードによって構築される。
  • ライトシップ・ネットワーク・バックエンドは、1秒間に2000メッセージをデバイスに送信する制限がある。 その制限を超えると、サーバーはメッセージの配信を遅くし、制限を超え続けると最終的に接続を切断する。 Netcodeを使用する場合、ホスト・デバイスは他のすべてのクライアントに個別にメッセージを送信してステートを更新するため、クライアント・デバイスよりもこの制限にぶつかる可能性が高いかもしれない。 ネットワークの更新頻度やプレーヤーの数を制限することで、この問題にぶつかる可能性を減らすことができるかもしれない。

モバイルネットワークの帯域幅が制限される可能性がある

  • ネットワークの帯域幅が許容する以上のデータを送信する場合、プレーヤーは遅延の増大を観察する。
  • 利用可能なネットワーク帯域幅は、さまざまな要因によって大きく変化します。 この帯域幅も選手によって異なることが多い。
  • アップストリームの帯域幅は、ダウンストリームの帯域幅よりもはるかに狭いことが多い。
  • 高速インターネット接続を使用してUnity Editorでテストしても、帯域幅に関連する潜在的な問題が明らかにならない場合があります。 MacOSとiOSでは、"Network Link Conditioner "を使って様々なネットワーク状況をシミュレートすることができる。
  • VPSトラッキングは現在、トラッキング状態になるまでにアップストリームで約1.6Mbpsを使用している。 その時間帯は、タイムクリティカルなメッセージングや大規模な同期は避けた方がいい。