Visual Studio は Unity WebGL コンテンツのデバッグをサポートしません。ビルド情報を取得するには、以下のヒントを参考にしてしてください。
Unity WebGL はファイルシステムにアクセスできないため、他のプラットフォームのようにログファイルを作成することはありません。ただし、すべてのログ情報 (Debug.Log
、Console.WriteLine
、Unity の内部ログなど) はブラウザーの JavaScript コンソールに記録されます。
JavaScript コンソールを開くには、以下の手順を行います。
デバッグの目的で、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 のメモリ を参照してください。
Unity WebGL は、セッション間で永続化させる必要のあるすべてのファイル (PlayerPrefs や persistentDataPath に保存されるファイルなど) をブラウザー IndexedDB に保存します。これは非同期 API なので、いつ終了するか分かりません。
以下のコードを呼び出して、メモリから IndexedDB ファイルシステムへの、持続中のファイルシステムの書き込み操作をすべてフラッシュするようにします。
FS.syncfs(false, function (err) {
if (err) {
console.log("Error: syncfs failed!");
}
});
ブラウザーのコンソールログは、通常、不適切なサーバー設定によってこのエラーを出力します。リリースビルドを展開する方法の詳細は、WebGL - 圧縮ビルドの展開 を参照してください。
コンテンツが LZMA (Unity WebGL はこれをサポートしていません) を使用して圧縮された AssetBundle をロードしようとすると、ブラウザーコンソールログはこのエラーを出力します。この問題を解決するには、LZ4 圧縮を使用して AssetBundle を再圧縮します。WebGL の圧縮の詳細は、WebGL アプリケーションのビルド、特に AssetBundles セクションを参照してください。