トラブルシューティング

Context Awareness (コンテクスト・アウェアネス)

不正確またはノイズの多い深度およびセマンティックセグメンテーション出力

最適な深度およびセマンティックセグメンテーションの出力が適切に実行されない原因については、 深度の概要 のトラブルシューティングページをご確認ください。このセクションでは深度を中心に説明していますが、モデルに関する留意点の多くは深度推定に対する場合とセマンティック予測に対する場合とで同様のことが言えます。

Androidデバイスのアウェアネス機能に関するクラッシュ

Androidを対象とし、以下のようなアウェアネス機能にアクセスするとクラッシュが発生する場合:

signal 7 (SIGBUS), code 1 (BUS_ADRALN)

Aodroidビルドの設定において**Scripting Backend** がIL2CPPに、Target Architectures がARMv7とARM64の両方に設定されていることをご確認ください。

ローカライゼーション

マップの選択と安定化に時間がかかり過ぎる

より効果的なローカライズを行うためのヒントは、 ローカライゼーションの確立 にてご確認ください。但し、古いデバイスや処理速度の遅いデバイスを使用する場合は、最新の高性能なデバイスと比べて時間がかかることが予想されます。

ARアウェアネス機能と共有ARを使用している際のパフォーマンスおよびバッテリーへの影響

セマンティックセグメンテーションやメッシングといったARアウェアネス機能と、環境コロカリゼーションスキャンといったマルチプレイヤー共有AR機能を同時に使用すると、パフォーマンスに問題が生じる場合があります。一部ケースではバッテリー消費にも問題が起こりえます。アウェアネス機能と共有ARマルチプレイヤーの両方を使用しなければならない状況でパフォーマンスに問題が生じる場合は、以下をお試しください。

  • 解像度をUnityのデフォルト設定から下げる(1080p推奨)

  • FPSと固定アップデート時間を30fpsに下げる

ハードウェア

ARDKの必要動作環境

CapabilityCheckerというヘルパーコンポーネントを使用すれば、ご使用デバイスでハードウェアおよびソフトウェアチェックを実行し、ARを扱えると判断された場合に静的フラグ「ARReady」をtrueに設定することができます(Unityエディター内で実行すると失敗します)。このヘルパーをシーンに追加し、ARマネージャー内の該当フィールドにクエリを実行して、ご使用デバイスがARを扱えるかご確認ください(またはご自身のマネージャークラスで同様のコードをご使用ください)。

メモリ管理

メモリリーク:匿名メソッドのサブスクリプションと静的ラッパー

匿名メソッドを用いたイベントにサブスクライブする場合、サブスクライブの解除が簡単に行えないという問題があります。トップレベルのARDKプロジェクト( IARSessionIMultipeerNetworkingIARNetworking など)の場合は、必要に応じて削除と再作成を行えるため大きな問題にはなりません。しかし静的クラス( ARSessionFactoryMultipeerNetworkingFactoryARNetworkingFactory など)はシーン間で維持されるため、以前にサブスクライブしたメソッドが新しいシーンに呼び出されてしまいます。

そのため、静的イベントにサブスクライブする場合は匿名メソッドで行わず、削除時には適切にサブスクライブを解除するよう注意してください。

ネットワーク

接続に失敗する

ネットワークエラーのコード ページにて、接続エラーコードを使った問題の診断方法をご確認ください。

ARDKサーバーが不安定なために接続に失敗する場合は、Slackの#helpチャンネルで、最近発生した障害について報告されているかをご確認ください。報告がない場合は、ヘルプチャンネルにて問題の報告をぜひ行ってください。サポートチームが対応させていただきます。

非確定的な権限要求

GreedyAuthorityReplicator のネットワーク使用は現在安全ではありません。2つのピアが同時に Authority を要求した場合、競合状態が発生します。ピアの権限要求は確定的な方法で行われるようにすることを推奨します(ホストのみが権限を要求できる、ネットワーク生成オブジェクトの各所有者が権限者になる、など)。

ホストマイグレーション

現在、オリジナルホストが MultipeerNetworking / ARNetworking セッションを離れても、サーバーがホストの役割を移動させることはありません。ですがホストがマップを生成してから ARNetworking セッションを離れた場合、参加ピアはそのマップと同期してネットワークアクションを実行することが可能です。この状態では新しいホストがいないため、ホストピアに依存する機能は正しく機能しなくなります。

ネットワークセッションの再利用

ネットワーク制限とベストプラクティス ページの「再接続とホストの離脱」セクションで、セッションの離脱およびセッションタイムアウトの挙動について詳細をご確認いただけます。

プラットフォーム

プラットフォーム限定オプションとメソッド

いくつかの実行オプションは特定プラットフォームでしか使用できません。これらは資料内でそのように記載されており、未定義の挙動となります。たとえば ARCamera.ProjectPoint(...) はiOS限定のメソッドです。

権限

必要な権限がまだ付与されていない場合は、一部の機能が動作しないか、アプリがクラッシュすることがあります。対象の機能とその機能に必要な権限については、 権限 ページをご参照ください。

iOSでは、その権限を必要とする機能が最初に起動されたときにプラットフォームから自動的に権限がリクエストされますが、Androidでは、アプリケーションコードのどこかで権限をリクエストする必要があります。ARDKの PermissionRequester APIでは、 UnityのAndroid Permissions API をラップアラウンドして、権限をリクエストするメソッドでasync/awaitオプションとcallbackオプションの両方を使用できます。

AndroidとiOSのどちらでも、権限をリクエストするタイミングや方法を詳細に制御できるように、プラットフォームに依存しない権限要求APIを開発中です。

ARDKでFirebaseとUnityエディターを使用する際の問題

Unity ARDKプロジェクトでGoogle Firebaseも使用する場合、デスクトップ上のUnityエディターを使用中に問題が生じる可能性があります。発生するエラーには QObject: Cannot create children for a parent that is in a different thread. などが考えられます。ARDKチームはこの問題に現在対応中ですが、一時的な回避策としてローカルプロジェクトの Assets/ARDK/Internals/StartupSystems.cs を編集し、 ManualStartup() メソッドで _ROR_CREATE_STARTUP_SYSTEMS(); のラインをコメントアウトする方法があります。コードは次のようになります:

    public static void ManualStartup()
    {
#if (AR_NATIVE_SUPPORT || UNITY_EDITOR_OSX)
      try
      {
        // The following line is commented out to avoid a Firebase issue
        // _ROR_CREATE_STARTUP_SYSTEMS();
        if (ServerConfiguration.AuthRequired)
          SetAuthenticationParameters();
      }
      catch (DllNotFoundException e)
      {
        ARLog._DebugFormat("Failed to create ARDK startup systems: {0}", false, e);
      }
#endif
    }

モバイルデバイス向けにプロジェクトをビルドしてテストする際には、こちらの変更を元に戻す必要があります ( _ROR_CREATE_STARTUP_SYSTEMS(); をアンコメント)。これは一時的な回避策であり、デスクトップでUnityを使用する場合にのみ必要となります。そのため、モバイルデバイス上では、この回避策を使用せずにプロジェクトのビルドと実行を行うことができます。なお、この回避策は、バーチャルスタジオのリモートモードやネットワークなど、一部の ARDK 機能を無効化するためご注意ください。

Unity Input System使用時の問題点

「StandaloneInputModule will not work(StandaloneInputModuleが動作していません)」などのビルドエラーや警告が表示される場合は、 Unity Input System を使用するように設定されているUnityプロジェクトのARDK使用例パッケージからシーンをビルドしようとしている可能性があります。ARDK使用例パッケージは、Unity Input Systemを使用するように更新されていないため、このパッケージはプロジェクトから削除する必要があります。