共有ARのデバッグ方法
シェアードARは、ARの複雑さとマルチプレイヤーのネットワーク問題を兼ね備えているため、デバッグが難しい場合がある。 開発の問題をデバッグするには、複数のデバイス、または1台のマシンで複数のUnityエディターのインスタンスが必要です。 また、マルチプレイでは、シングルプレーヤーのアプリケーションよりも多くのレースコンディションやタイミングの問題が発生する。 このHow-Toでは、共有AR体験をデバッグするためのヒントをいくつか取り上げ、一般的な問題のトラブルシューティングガイドとして活用します。
前提条件
このハウツーには以下が必要です:
- Netcodeを使用したVPSコロカライゼーションの使用方法」または「Netcodeを使用した画像トラッキングコロカライゼーションの使用方法」のいずれかを修了していること。
- 再生準備完了。
- お使いのマシンにインストールされているParrelSync。
UnityエディタでPlaybackとParrelSyncを使ってデバッグする
ParrelSyncは、2つ目のUnityエディタウィンドウを開き、元のプロジェクトからの変更をミラーリングすることで、プロジェクトをビルドせずにマルチプレイヤーゲームプレイをテストできるUnityエディタ拡張機能です。
ParrelSync をセットアップし、デバッグを開始します:
- ParrelSyncメニューからクローンマネージャーを開きます。 クローンマネージャーで 新規クローンの作成をクリックし、クローンプロジェクトを作成します。 完成までには時間がかかるかもしれない。
- Clones Managerで、Open in New Editorをクリックし、クローンされたプロジェクトを開きます。 元のプロジェクトが変更されると、クローン化されたプロジェクトも更新されます。
- すべてのエディタでプロジェクトをプレイモードで実行してください。 すべてのインスタンスはセッションに参加し、コロカライズする必要がある。 すべてのインスタンスが同じルームに接続されていることを確認してください。
クロスプラットフォームデバッグ
アプリケーションのARトラッキングがUnity Editorでうまく動作しない場合でも、デバイスとUnity Editorを一緒に使用することで、プラットフォームをまたいだデバッグを行うことができます。 ARDKはまた、エディターとデバイス間のテストとデバッグを可能にする「モック・コローカライゼーション」モードもサポートしています。 (このモードはネットワーク機能にのみ適用される)。
クロスプラットフォームのテストセッションを開始する:
Hierarchyで XR Origin を選択します。 InspectorウィンドウでShared Space Managerコンポーネントを見つけ、Colocalization Typeを選択し、MockColocalizationを選択します。
スクリプトで、
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);
}.シーンを開始すると、アプリはデバイスとエディターの両方で、ホストかクライアントを選択するUIに直行するはずです。
デバイスのデバッグ
共有ARサンプルのダウンロードとインストール方法については、サンプルプロジェクトを参照してください。
共有ARオリジンを示すことによるコロカライゼーションのデバッグ
共有AR XROriginを含むシーンの原点に立方体を置くことは、コロカライゼーションをテストするのに便利なテクニックである。 キューブの挙動を見ることで、VPSやイメージトラッキングが機能しているかどうかを確認したり、Shared ARの原点の実際の位置を見つけたり、デバイス間のVPSやイメージトラッキングの位置精度や回転精度をテストしたりすることができる。
パーシステントアンカーの位置や回転がデバイス間で異なる場合、デバイスは同期していません。 アンカーが正しい位置と向きにあるにもかかわらず、ネットワークオブジェクトがそうでない場合、デバイスは同期しているが、ネットワークオブジェクトが同期して配置されていないことになる。
ナイアンティックはこの目的のために、方向矢印付きのプレハブキューブを提供している。 SharedARサンプルのAssets/Samples/SharedAR/Prefabsから
OriginVisualizerを
探します。
アンカー位置にプレハブを表示するには、SharedSpaceManagerの
トラッキングイベントハンドラに以下のコードスニペットを追加します:
[SerializeField]
private SharedSpaceManager _sharedSpaceManager;
[SerializeField]
private GameObject _sharedRootMarkerPrefab;
private void OnColocalizationTrackingStateChanged(SharedSpaceManager.SharedSpaceManagerStateChangeEventArgs args)
{
if (args.Tracking)
{
Instantiate(_sharedRootMarkerPrefab,
_sharedSpaceManager.SharedArOriginObject.transform, false);
}.
}
ネットワーク統計
ネットワーク統計は、レイテンシーや接続の問題など、マルチプレイの問題を分析する際に非常に役立ちます。 SharedARパッケージには、LightshipNetcodeTransportStatsUIという
プレハブがあり、ホストまでの往復時間、送信データ量、メッセージ数などのネットワーキング統計情報をUIパネルで提供します。 このプレハブはPackages/Niantic Lightship Shared AR Client Plugin/Assets/Prefabsに
あります。
ネットワーク統計UIを有効にするには
LightshipNetcodeTransportStatsUI
プレハブをプロジェクトのAssetsフォルダに追加します。シーンにCanvasオブジェクトがない場合は、作成してください。
- ARシーンの下の階層を右クリックし、Createメニューを開き、UIを選択し、Canvasを選択します。
プレハブをAssetsフォルダからCanvasオブジェクトにドラッグします。
Hierarchy で、プレハブを選択し、Inspector でLightship Netcode Transport Stats Displayを見つけます。 以下の設定を確認する:
- Lightship Netcode TransportがNetworkManager (Lightship Netcode Transport) に設定されていることを確認します。
- Textプロパティで、出力先のテキストオブジェクトを指定します。
- BG Imageプロパティで、キャンバスの背景画像を設定します。 画像 コンポーネントを使用して、現在の画像を修正します。
- サンプルレートを変更するには、 Sample Rate in Secondsを更新します。 デフォルトでは、UIは1秒に1回サンプリングする。 注意:サンプル・レートが高くなると、ネットワーク・パフォーマンスが低下することがあります。
- ネットワーキング・パネルに詳細な情報を表示したい場合は、Verbose Textにチェックを入れる。 以下は、通常のテキストと冗長なテキストの例である:
Regular TextVerbose Text
トラブルシューティング
接続失敗
- APIキーが正しく設定されていることを確認してください。
- 選手数が会場の収容人数以下であることを確認してください。 部屋の収容人数は、
ISharedSpaceRoomOptions.CreateVpsRoomOption(
) またはISharedSpaceRoomOptions.CreateLightshipRoomOptions(
) を呼び出すときに設定されます。 - 一人のプレイヤーがホストとして開始し、他のプレイヤーがクライアントとして参加したことを確認する。
- 現在、ユーザーが明示的に
Leave()
関数を複数回呼び出さずにルームから退出すると、ルームが結合不能になる既知の問題があります。 これを回避するには、RoomManagementService.DeleteRoom()
を呼び出してルームを削除し、新しいルームを作成します。 Netcodeを使用している場合、SharedSpaceManagerと
LightshipNetcodeTransportが
破壊されると、プレイヤーは自動的にルームから退出します。
予期せぬ切断
- デバイスのネットワーク接続を確認します。
- 現在、プレイヤーは30分後にアクティビティに関係なく自動的に切断される。
未配信メッセージ
INetworking.SendData()
の最大ペイロードサイズは1KBである。 1KBを超えるメッセージは送信されない。- ライトシップ・ネットワークは、1台につき毎秒2000通のメッセージを送信できる。 この制限を継続的に超えるクライアント接続は、メッセージの受信が遅くなり、最終的にはサーバーによって切断される。 Netcodeを使用すると、ホストがゲームの状態を更新するために各クライアントに個別にメッセージを送信するため、ホストデバイスがこの制限に達する可能性が高くなります。 このようなことが起こる可能性を減らすために、ネットワークの更新頻度やプレーヤーの数を制限することをお勧めします。
モバイルネットワークの帯域幅の問題を診断する
- モバイルネットワークの帯域幅の可用性は、天候や地理的条件など、さまざまな要因によって変化します。 帯域幅が制限されている状況では、プレーヤーは待ち時間を観察することになる。
- アップストリームの帯域幅は通常、ダウンストリームよりもはるかに狭いため、サーバーへのメッセージが遅くなる可能性があることに注意してください。
- 有線インターネット接続を使用してUnity Editorでテストしても、帯域幅に関連する潜在的な問題が明らかにならない場合があります。 MacとiOSでは、ネットワーク・リンク・コンディショナー(外部ウィンドウで開きます)を使用して、テスト用のネットワーク条件をシミュレートできます。
- VPSトラッキングでは、トラッキング状態に達するまでに約1.6Mbpsのアップストリーム帯域幅を使用する。 クリティカルなメッセージングと同期の問題を避けるため、同期を開始するには、アプリケーションがトラッキング状態になるまで待つ。