网页技术对设计在网页浏览器中运行的 Unity 网页应用程序施加了一些限制。在为网页平台构建应用程序之前,请确保您了解以下技术限制。
大多数流行的桌面浏览器版本都支持 Unity 网页内容,但请注意,不同的浏览器提供的支持级别不同。
由于平台本身的限制,网页构建中的以下功能不可用或受到限制
Visual Studio 不支持调试网页构建。有关更多信息,请参阅调试和排查网页构建问题。
由于浏览器对文件系统的访问权限受限,网页构建不支持 Unity 缓存和缓存脚本 API。相反,对资产数据和 AssetBundle 的网络请求将缓存到浏览器缓存中。请参阅网页中的缓存行为。
由于 JavaScript 中缺少线程支持,因此不支持线程。这适用于 Unity 内部使用线程来提高性能,以及在脚本代码和托管 dll 中使用线程。从本质上讲,System.Threading
命名空间中的任何内容都不受支持。
网页平台不支持一些网络Unity 系统,支持跨计算机网络进行多人游戏。 更多信息
参见术语表功能
出于安全考虑,浏览器不允许直接访问 IP 套接字进行网络连接。有关更多信息,请参阅网页网络。
System.Net
命名空间中的 .NET 网络类不受支持。
网页平台不支持原生套接字访问,因为浏览器存在安全限制。因此,网页也不支持 ICMP ping 或UnityEngine.Ping 等功能。
网页平台在WebGL一种 JavaScript API,用于在网页浏览器中渲染 2D 和 3D 图形。Unity 网页构建选项允许 Unity 将内容发布为 JavaScript 程序,这些程序使用 HTML5 技术和 WebGL 渲染 API 在网页浏览器中运行 Unity 内容。 更多信息
参见术语表图形 API 中存在一些限制,该 API 基于 OpenGL ES 图形库的功能。有关更多信息,请参阅网页图形。
网页构建使用基于Web Audio API 的自定义音频后端,但它仅支持基本音频功能。有关更多信息,请参阅网页中的音频。
网页是一个 AOT 平台,因此它不允许使用System.Reflection.Emit
动态生成代码。这在所有其他IL2CPPUnity 开发的脚本后端,可作为在为某些平台构建项目时使用 Mono 的替代方案。 更多信息
参见术语表平台(iOS 和大多数游戏机)上也是如此。
尽管 Unity 为原生 C/C++ 代码提供了多线程支持,但由于 WebAssembly 的限制,网页平台尚不支持 C# 多线程。这意味着使用网页平台构建的应用程序必须在单个 C# 线程上运行。
备注:
如果在网页播放器设置允许您为 Unity 生成的最终游戏设置各种特定于播放器的选项的设置。 更多信息
参见术语表中启用了原生 C/C++ 支持,则网页平台支持 C/C++ 多线程。
当您的文档位于安全上下文中时,网页平台支持多线程。
服务器必须设置以下 HTTP 响应标头。
在网页平台上执行复杂异步任务的推荐方法是使用协程。有关更多信息,请参阅协程文档。
以下因素限制了多线程支持
网页平台使用 WebAssembly,这是一种用于在网页浏览器中安全有效地执行 Unity 代码的字节码格式。网页浏览器设计为在安全且隔离的环境中运行代码,该环境阻止直接访问本机 WebAssembly 堆栈。这会影响多线程垃圾回收,因为与在其他平台上以多帧增量执行不同,Web 垃圾回收器仅在每一帧结束时执行一次。
网页上的后台工作程序彼此独立地并行执行代码。在原生平台上,主线程可以同步地向其他线程发送信号以暂停进行垃圾回收。网页上不支持此同步信号,这阻止了 WebAssembly 编译的 C# 代码在多个线程中运行。