Version: 2022.3
言語: 日本語
WebGL の入力
WebGL のパフォーマンスに関する考慮事項

WebGL ビルドのデバッグとトラブルシューティング

Visual Studio は Unity WebGL コンテンツのデバッグをサポートしません。ビルド情報を取得するには、以下のヒントを参考にしてしてください。

ブラウザーの JavaScript コンソール

Unity WebGL はファイルシステムにアクセスできないため、他のプラットフォームのようにログファイルを作成することはありません。ただし、すべてのログ情報 (Debug.LogConsole.WriteLine、Unity の内部ログなど) はブラウザーの JavaScript コンソールに記録されます。

JavaScript コンソールを開くには、以下の手順を行います。

  • Firefox では、Ctrl-Shift-K (Windows)、または Command-Option-K (Mac) を押します。
  • Chrome では、Ctrl-Shift-J (Windows)、または Command-Option-J (Mac) を押します。
  • Safari では、Preferences > Advanced > Develop の順に移動し、Command-Option-C を押します。
  • Microsoft Edge または Internet Explorer で、F12 を押します。

開発ビルド

デバッグの目的で、Unity で開発ビルドを作成したい場合があります (Build Settings ウィンドウ を開き、Development Build チェックボックスにチェックします)。開発ビルドでは、プロファイラーを接続することができ、Unity はそれらを minify (ミニファイ) しません。そのため、生成された JavaScript コードには人間が読める (C++ 名前修飾 ですが) 関数名が含まれています。ブラウザーエラーが発生すると、Debug.LogError の使用時、または、例外をスローし例外サポートが無効になった時に、ブラウザーは上記を利用してスタックトレースを表示します。例外的なサポートが完全にサポートされている場合 (以下を参照) に発生するマネージスタックトレースとは異なり、これらのスタックトレースは名前修飾した名前を持ち、マネージコードだけでなく内部の UnityEngine コードも含みます。

例外のサポート

WebGL にはさまざまなレベルの例外のサポートがありますが、デフォルトでは、Unity WebGL は明示的にスローされた例外のみをサポートします。詳しくは、WebGL アプリケーションのビルド を参照してください。Full の例外サポートを有効にすると、IL2CPP によって生成されたコードで追加のチェックを行い、マネージコードの null 参照と範囲外の配列要素へのアクセスをキャッチできます。これらの追加のチェックは、パフォーマンスに著しく影響し、コードサイズやロード時間を増加させるので、デバッグにのみ使用してください。

Full の例外サポートは、マネージコードのスタックトレースを生成するための関数名も出力します。このため、スタックトレースは、キャッチできない例外と Debug.Log ステートメントのためのコンソールに表示されます。スタックトレース文字列を取得するには System.Environment.Stacktrace を使用します。

トラブルシュート

問題: ビルドにメモリ不足が発生する

これは一般的な問題で、特に 32 ビットブラウザーで発生します。WebGL のメモリ問題とその修正方法の詳細は、WebGL のメモリ を参照してください。

問題: Application.persistentDataPath に保存したファイルが永続化されない

Unity WebGL は、セッション間で永続化させる必要のあるすべてのファイル (PlayerPrefs や persistentDataPath に保存されるファイルなど) をブラウザー IndexedDB に保存します。これは非同期 API なので、いつ終了するか分かりません。

以下のコードを呼び出して、メモリから IndexedDB ファイルシステムへの、持続中のファイルシステムの書き込み操作をすべてフラッシュするようにします。

FS.syncfs(false, function (err) {
  if (err) {
    console.log("Error: syncfs failed!"); 
  }
 });

エラーメッセージ: Incorrect header check (誤ったヘッダーチェック)

ブラウザーのコンソールログは、通常、不適切なサーバー設定によってこのエラーを出力します。リリースビルドを展開する方法の詳細は、WebGL - 圧縮ビルドの展開 を参照してください。

エラーメッセージ: Decompressing this format (1) is not supported on this platform (この形式の解凍 (1) はこのプラットフォームではサポートされていません)

コンテンツが LZMA (Unity WebGL はこれをサポートしていません) を使用して圧縮された AssetBundle をロードしようとすると、ブラウザーコンソールログはこのエラーを出力します。この問題を解決するには、LZ4 圧縮を使用して AssetBundle を再圧縮します。WebGL の圧縮の詳細は、WebGL アプリケーションのビルド、特に AssetBundles セクションを参照してください。

WebGL の入力
WebGL のパフォーマンスに関する考慮事項