Version: Unity 6.0 (6000.0)
语言 : 中文
Web 浏览器兼容性
Web 开发和发布流程

技术限制

Web 技术对设计为在 Web 浏览器中运行的 Unity Web 应用程序施加限制。在为 Web 平台构建应用程序之前,请确保了解以下技术限制。

平台支持

大多数流行的桌面端浏览器版本都支持 Unity Web 内容,但请注意,不同的浏览器提供不同程度的支持

由于平台本身的限制,Web 构建中的以下功能不可用或受到限制:

Visual Studio 中缺少 Web 构建调试支持

Visual Studio 不支持调试 Web 构建。有关更多信息,请参阅Web 构建的调试和故障排除

缺少 Unity 缓存和缓存脚本支持

由于浏览器中对文件系统的访问受限,Web 构建不支持 Unity 缓存和缓存脚本 API。对资产数据和 AssetBundle 的网络请求将改为缓存在浏览器缓存中。请参阅 Web 中的缓存行为

缺少线程支持

由于 JavaScript 中缺少线程支持,因此不支持线程。在 Unity 内部使用线程来加速性能以及在脚本代码和托管的 dll 中使用线程都是不受支持的。实质上不支持 System.Threading 命名空间中的任何内容。

联网限制

有一些联网功能是 Web 平台不支持的:

  • 出于安全考虑,浏览器不允许直接访问 IP 套接字来进行联网。有关更多信息,请参阅 Web 联网

  • 不支持 System.Net 命名空间中的 .NET 联网类。

  • 由于浏览器内的安全限制,Web 平台不支持原生套接字访问。因此,Web 也不支持 ICMP ping 或 UnityEngine.Ping 等功能。

图形限制

WebGL 图形 API 基于 OpenGL ES 图形库的功能,因此 Web 平台存在一些限制。有关更多信息,请参阅 Web 图形

音频限制

Web 构建使用基于 Web 音频 API 的自定义音频后端,但仅支持基本的音频功能。有关更多信息,请参阅 Web 中的音频

动态生成代码

Web 是一个 AOT 平台,因此不允许使用 System.Reflection.Emit 来动态生成代码。在所有其他__ IL2CPP__种由 Unity 开发的脚本后端,可在为某些平台构建项目时替代 Mono。更多信息
See in Glossary
平台、iOS 和大多数游戏主机上都是如此。

多线程支持

虽然 Unity 为原生 C/C++ 代码提供多线程支持,但由于 WebAssembly 的限制,Web 平台尚不支持 C# 多线程。这意味着使用 Web 平台构建的应用程序必须在单个 C# 线程上运行。

注意

在 Web 平台上执行复杂异步任务时,推荐使用协同程序。有关更多信息,请参阅协同程序文档。

以下因素限制了多线程支持:

本机堆栈扫描的约束

Web 平台使用 WebAssembly,这是一种字节码格式,用于在 Web 浏览器中安全高效地执行 Unity 代码。Web 浏览器被设计为在安全和隔离的环境中运行代码,从而阻止对 WebAssembly 本地堆栈的直接访问。这会影响多线程垃圾收集,因为 Web 垃圾回收器仅在每帧末尾运行一次,不像其他平台那样在多个帧上逐步递增。

不支持抢占式线程信令

Web 上的后台工作线程彼此独立并行执行代码。在原生平台上,主线程可以同步向其他线程发送信号以暂停垃圾收集。Web 不支持此同步信令,因此会阻止 WebAssembly 编译的 C# 代码在多线程中运行。

构建和运行限制

Unity 使用仅具有基本功能的 Web 服务器来托管使用构建并运行 (Build and Run) 创建的 Web 构建(菜单:编辑 (Edit) > 构建配置文件 (Build Profiles) > 构建并运行 (Build and Run))。

服务器不支持数据缓存,这会影响:

  • .data 文件,其中包含不使用 AssetBundleAddressables 的构建的所有场景和资产。
  • Addressables 和 AssetBundle 文件。

其他资源

Web 浏览器兼容性
Web 开发和发布流程