Version: 2022.1
Input in WebGL
WebGL performance considerations

Debug and troubleshoot WebGL builds

Visual Studio doesn’t support debugging Unity WebGL content. Use the following tips to get your build information.

浏览器的 JavaScript 控制台

Unity WebGL doesn’t have access to your file system, so it doesn’t write a log file like other platforms. However, it does write all logging information such as Debug.Log, Console.WriteLine or Unity’s internal logging to the browser’s JavaScript console.

要打开 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。

开发版

For debugging purposes, you might want to make a development build in Unity (open the Build Settings window and enabled the Development Build checkbox). Development builds allow you to connect the profiler, and Unity doesn’t minify them, so the emitted JavaScript code still contains human-readable (though C++-mangled) function names. The browser uses these to display stack traces if you run into a browser error, when using Debug.LogError, or when an exception occurs and exception support is disabled. Unlike the managed stack traces that can occur when you have full exception support (see below), these stack traces have mangled names, and contain not only managed code, but also the internal UnityEngine code.

异常支持

WebGL 具有不同级别的异常支持(请参阅有关 WebGL 构建的文档)。默认情况下,Unity WebGL 仅支持显式抛出的异常。您可以启用__完全__的异常支持,这种情况下支持在 IL2CPP 生成的代码中发起额外的检查,从而检测是否访问了托管代码中的 null 引用和越界数组元素。这些额外的检查会显著影响性能并增加代码大小和加载时间,因此只应将其用于调试。

__完全__的异常支持还会发出函数名称,以便为托管代码生成堆栈跟踪。出于这一原因,对于未捕获的异常和 Debug.Log 语句,堆栈跟踪将出现在控制台中。使用 System.Environment.Stacktrace 可获取堆栈跟踪字符串。

故障排除

问题:构建耗尽内存

这是一个常见问题,尤其是在 32 位浏览器上。如需了解 WebGL 内存问题以及如何修复这些问题的更多信息,请参阅有关 WebGL 中的内存的文档。

Problem: Files saved to Application.persistentDataPath don’t persist

Unity WebGL 将会话之间必须保留的所有文件(例如 PlayerPrefs 或保存在 persistentDataPath 中的文件)存储到浏览器 IndexedDB 中。这是一个异步 API,因此您不知道它何时完成。

调用以下代码可以确保 Unity 将所有挂起的文件系统写入操作从内存中刷新到 IndexedDB 文件系统:

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

错误消息:Incorrect header check

The browser console log usually prints this error due to incorrect server configuration. For more information on how to deploy a release build, see documentation on Deploying compressed builds.

Error message: Decompressing this format (1) isn’t supported on this platform

The browser console log prints this error when the content tries to load an AssetBundle compressed using LZMA, which Unity WebGL doesn’t support. Re-compress the AssetBundle using LZ4 compression to solve this problem. For more information on compression for WebGL, see documentation on WebGL building, particularly the AssetBundles section.


  • 从 2018.1 开始,MonoDevelop 由 Visual Studio 取代
Input in WebGL
WebGL performance considerations