共有ARのデバッグ方法
共有ARは、ARの複雑さとマルチプレイヤーのネットワーク問題が重なり、デバッグが難しくなる場合があります。 開発時の問題をデバッグするには、複数のデバイスや、1台のマシンで複数のUnityエディターのインスタンスを実行する必要があります。 また、マルチプレイでは、シングルプレイヤーのアプリケーションに比べて、競合状態やタイミングの問題が発生しやすくなります。 この入門ガイドでは、共有AR体験をデバッグするためのヒントを紹介し、一般的な問題のトラブルシューティングガイドとして提供します。
前提条件
この入門ガイドを進めるには、以下の要件を満たしている必要があります。
- デバッグしたいLightship Shared ARを含むUnityプロジェクト。 何から始めたらいいかわからない場合は、共有ARの使い方から始めよう。
- プレイバック 機能が使用できる状態であること。
- ParrelSync がお使いのマシンにインストールされていること。
Unityエディターでプレイバック機能とParrelSyncを使用してデバッグする
ParrelSync は、Unityエディターの拡張機能です。Unityエディターで2つ目のウィンドウを開き、元のプロジェクトの変更をミラーリングすることで、マルチプレイヤーのゲームプレイをテストできます。プロジェクトをビルドする必要はありません。
ParrelSyncを設定してデバッグを開始するには、次の手順を行います。
- ParrelSync メニューから、 Clones Manager を開きます。 Clones Manager で Create new clone(新しいクローンを作成) をクリックして、クローンプロジェクトを作成します。 この処理には、時間がかかる場合があります。
- Clones Manager で Open in New Editor(新しいエディターで開く) をクリックして、クローンされたプロジェクトを開きます。 元のプロジェクトが変更されると、クローンされたプロジェクトも更新されます。
- 各エディターでプロジェクトを プレイ モードで実行します。 すべてのインスタンスがセッションに参加し、位置を正しく共有(コロカライズ)する必要があります。 すべてのインスタンスが同じルームに接続されていることを確認してください。
クロスプラットフォームのデバッグ
UnityエディターでアプリケーションのARトラッキングがうまく動作しない場合は、デバイスとUnityエディターを併用してプラットフォーム間のデバッグを行うとよいでしょう。こうすることで、物理デバイス上でARマルチプレイヤーを実行しながら、Unity内のゲームステートやシーンの階層構造を確認できるようになります。 ARDKでは、「Mock Colocalization」モードもサポートされており、このモードを使用して、エディターとデバイス間でテストやデバッグを行うことができます。 (このモードはネットワーキング機能にのみ適用されます。)
クロスプラットフォームのテストセッションを開始するには、次の手順を行います。
Hierarchyで XR Origin を選択します。 Inspector ウィンドウで Shared Space Manager コンポーネントを探し、 Colocalization Type で MockColocalization を選択します。
スクリプト内で
MockColocalization
設定をテストし、ペイロード値を使用してルームを設定します。 使用例:if (_sharedSpaceManager.GetColocalizationType() ==
SharedSpaceManager.ColocalizationType.MockColocalization)
{
// 接続するルームを設定
var mockTrackingArgs = ISharedSpaceTrackingOptions.CreateMockTrackingOptions();
var roomArgs = ISharedSpaceRoomOptions.CreateLightshipRoomOptions(
"TestRoom",
32,
"Mock Colocalizationを使用するテストルーム"
);
_sharedSpaceManager.StartSharedSpace(mockTrackingArgs, roomArgs);
}.シーンを開始すると、アプリはデバイスとエディターの両方で、ホストかクライアントを選択するUIに直行するはずです。
デバイスのデバッグ
共有ARサンプルのダウンロードとインストールの方法については、 サンプルプロジェクト を参照してください。
共有ARの原点を表示してコロカライゼーションをデバッグする
コロカライゼーションをテストする有効な方法として、共有ARのXROriginを含むシーンの原点にキューブを配置する方法があります。 キューブの挙動を観察することで、VPSや画像トラッキングが正常に動作しているかを確認したり、共有ARの原点の現実世界での位置を特定することができます。また、デバイス間でのVPSや画像トラッキングの位置や回転の精度を確認することも可能です。
永続的なアンカーの位置や回転がデバイス間で異なる場合、デバイスは同期されません。 アンカーの位置や向きは正しいものの、ネットワークオブジェクトが正しく配置されていない場合、デバイスは同期しているが、ネットワークオブジェクトは同期して配置されていないことになります。
Niantic では、このコロカライゼーションのデバッグを行うために、方向矢印が付いたプレハブのキューブを提供しています。 共有ARサンプルの 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シーンの Hierarchy で右クリックし、 Create メニューを開きます。次に、 UI、 Canvas の順に選択します。
プレハブを Assets フォルダからCanvasオブジェクトにドラッグします。
Hierarchy でプレハブを選択し、 Inspector 内の Lightship Netcode Transport Stats Display を見つけます。 以下の設定を確認します。
- Lightship Netcode Transport が NetworkManager(Lightship Netcode Transport) に設定されていることを確認します。
- Text プロパティで、出力先のテキストオブジェクトを指定します。
- BG Image プロパティで、Canvasの背景画像を設定します。 画像 コンポーネントを使用して、現在の画像を修正します。
- サンプルレートを変更するには、 Sample Rate in Secondsを更新します。 デフォルトでは、UIでサンプルが1秒ごとに取得されます。 注: サンプルレートを高く設定すると、ネットワーク性能が低下する可能性があります。
- ネットワーキングパネルに詳細な情報を表示したい場合は、 Verbose Text をチェックしてください。 通常のテキストと詳細なテキストの例を以下に示します。
Regular TextVerbose Text
トラブルシューティング
接続に失敗する
- APIキーが正しく設定されていることを確認してください。
- プレイヤー数がルームの収容人数以内であることを確認してください。 ルームの収容人数は、
ISharedSpaceRoomOptions.CreateVpsRoomOption()
またはISharedSpaceRoomOptions.CreateLightshipRoomOptions()
を呼び出す際に設定されます。 - 1人のプレイヤーがホストとして開始し、他のプレイヤーがクライアントとして参加していることを確認してください。
- 現在、ユーザーが
Leave()
関数を複数回明示的に呼び出さずにルームを離れると、ルームに再参加できなくなる既知の問題があります。 この問題を回避するには、RoomManagementService.DeleteRoom()
を呼び出してルームを削除し、新しいルームを作成してください。 Netcodeを使用している場合、シーンを離れる際にSharedSpaceManager
やLightshipNetcodeTransport
が削除されると、プレイヤーは自動的にルームを退出します。
予期しない切断が発生する場合
- デバイスのネットワーク接続を確認してください。
- 現在、アクティビティの有無にかかわらず、プレイヤーは30分後に自動的に切断されます。
メッセージが届かない場合
INetworking.SendData()
の最大ペイロードサイズは1KBです。 1KBを超えるメッセージは送信されません。- Lightshipのネットワークでは、デバイスごとに1秒間に2000メッセージを送信できます。 クライアント接続がこの制限を超えると、メッセージの受信が遅くなり、最終的にはサーバーによって切断されます。 Netcodeを使用している場合、ホストデバイスから各クライアントに個別にゲームステートを更新するメッセージが送信されるため、この制限に達する可能性が高くなります。 この問題を防ぐために、ネットワークの更新頻度やプレイヤー数を制限することをお勧めします。
モバイルネットワークの帯域幅の問題を診断する場合
- モバイルネットワークの帯域幅は、天候や地理的要因など、さまざまな要因によって変動します。 帯域幅が制限されている状況では、プレイヤーがレイテンシーを感じることがあります。
- アップストリームの帯域幅は通常、ダウンストリームよりもかなり少ないため、サーバーへのメッセージ送信が遅くなる可能性がある点に注意してください。
- 有線インターネット接続を使用してUnityエディターでテストしている場合、帯域幅に関連する問題が明らかにならない可能性があります。 MacやiOSでは、 Network Link Conditioner(外部ウィンドウで開きます)を使用して、ネットワーク条件をシミュレートしてテストできます。
- VPSトラッキングは、トラッキング状態に到達する前に約1.6Mbpsのアップストリーム帯域幅を使用します。 重要なメッセージングや同期の問題を避けるために、アプリケーションがトラッキング状態に到達するまで同期を開始しないでください。