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 にはさまざまなレベルの例外のサポートがあります (WebGL プロジェクトのビルドと実行 を参照)。デフォルトでは、Unity 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) {
console.log('Error: syncfs failed!');
});
ブラウザーのコンソールログは、通常、不適切なサーバー設定が原因でこのエラーを出力します。リリースビルドを展開する方法の詳細は、WebGL - 圧縮ビルドの展開 を参照してください。
コンテンツが LZMA (Unity WebGL はこれをサポートしていません) を使用して圧縮された AssetBundle を読み込もうとすると、ブラウザーコンソールログはこのエラーを出力します。 この問題を解決するには、LZ4 圧縮を使用して AssetBundle を再圧縮します。WebGL の圧縮の詳細は、WebGL のビルドと実行 のドキュメント、特に AssetBundles セクションを参照してください。
2018–09–03 修正されたページ
MonoDevelop は 2018.1 以降 Visual Studio に置き換えられました