包含此页的版本:
不含此页的版本:
Web 技术对设计用于在 Web 浏览器中运行的 Unity Web 应用程序施加了限制。在为 Web 平台构建应用程序之前,请确保了解以下技术限制。
大多数流行的桌面浏览器版本都支持 Unity Web 内容,但请注意,不同的浏览器提供不同级别的支持。
由于平台本身的限制,Web 版本中的以下功能不可用或受到限制:
Visual Studio 不支持调试 Web 生成。有关详细信息,请参阅调试和排查 Web 版本。
由于浏览器中对文件系统的访问受到限制,Web 版本不支持 Unity 缓存和缓存脚本 API。对资产数据和资产包的网络请求将缓存在浏览器缓存中。请参阅 Web 中的缓存行为。
Web 平台不支持物理到活动键盘映射,这是 Unity 输入系统的一项功能。此限制意味着依赖于将物理键代码转换为虚拟键盘布局的某些 InputControl 属性在非英语键盘上无法按预期运行。
由于 WebAssembly 中缺少多线程垃圾回收功能,因此不支持托管 (C#) 线程。您可以使用实验性播放器设置“本机 C/C++ 多线程)启用对原生 C/C++ 线程形式的线程的部分支持。请参阅多线程支持。
由于此限制,C# 中的任何内容System.Threading不支持命名空间。例如,使用System.Threading.Timer类不会在 Web 构建中触发。此外,在System.Threading.CancellationTokenSource实际上不要超时,因为取消机制基于System.Threading.Timer.
以下代码突出显示了这些行为差异:
using System.Threading;
using UnityEngine;
public class NoMultithreadedTimers : MonoBehaviour
{
private Timer t;
private static void TimerCallbackElapsed(object obj)
{
Debug.Log("Timer Callback Fired!"); // This will never fire in Web builds because multithreaded timers aren't available.
}
private void Awake()
{
t = new Timer(new TimerCallback(TimerCallbackElapsed), this, 1, -1);
}
}
public class NoCancellationTokenSourceTimeouts : MonoBehaviour
{
private CancellationTokenSource cs;
private void Awake()
{
cs = new CancellationTokenSource(0); // millisecondsDelay=0 to time out immediately
}
private void Update()
{
Debug.Log(cs.IsCancellationRequested.ToString()); // Will return false in Web builds since timeouts aren't tracked for cancellation tokens.
}
}
有几个网络支持跨计算机网络进行多人游戏的 Unity 系统。更多信息
请参阅术语表Web 平台不支持的功能:
出于安全考虑,浏览器不允许直接访问 IP 套接字进行联网。有关详细信息,请参阅 Web 网络。
.NET 网络类System.Net不支持命名空间。
由于浏览器中的安全限制,Web 平台不支持本机套接字访问。因此,Web 也不支持 ICMP ping 或 UnityEngine.Ping 等功能。
Web 平台中有一些限制,使用WebGL一种在 Web 浏览器中呈现 2D 和 3D 图形的 JavaScript API。Unity Web 构建选项允许 Unity 将内容发布为 JavaScript 程序,这些程序使用 HTML5 技术和 WebGL 渲染 API 在 Web 浏览器中运行 Unity 内容。更多信息
请参阅术语表图形 API,它基于 OpenGL ES 图形库的功能。有关详细信息,请参阅 Web 图形。
Web 版本使用基于 Web Audio API 的自定义音频后端,但它仅支持基本的音频功能。有关更多信息,请参阅 Web 中的音频。
Web 是一个 AOT 平台,因此它不允许使用System.Reflection.Emit. 这在所有其他IL2CPP:Unity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代品。更多信息
请参阅术语表平台、iOS 和大多数游戏机。
尽管 Unity 为本机 C/C++ 代码提供多线程支持,但由于 WebAssembly 的限制,Web 平台尚不支持 C# 多线程。这意味着使用 Web 平台构建的应用程序必须在单个 C# 线程上运行。
笔记:
仅当您在 Web 中启用本机 C++ 支持时,Web 平台才支持 C/C++ 多线程玩家设置设置,用于为 Unity 构建的最终游戏设置各种特定于玩家的选项。更多信息
请参阅术语表.
当文档位于安全上下文中时,Web 平台支持多线程。
服务器必须设置以下 HTTP 响应标头。
在 Web 平台上执行复杂异步任务的推荐方法是使用Awaitable,可以将System.Threading.Tasks.Task在大多数情况下。有关详细信息,请参阅使用 Awaitable 进行异步编程简介。
您还可以将协程用于异步工作流。但请注意Awaitable可以直接返回值并自动抛出错误,而协程需要为这两项任务提供额外的逻辑。
以下因素限制了多线程支持:
Web 平台使用 WebAssembly,这是一种字节码格式,用于在 Web 浏览器中安全高效地执行 Unity 代码。Web 浏览器旨在在安全且隔离的环境中运行代码,该环境会阻止对本机 WebAssembly 堆栈的直接访问。这会影响多线程垃圾收集,因为 Web 垃圾收集器仅在每一帧结束时运行一次,这与其他平台上的多个帧增量运行不同。
Web 上的后台辅助角色彼此独立并行执行代码。在本机平台上,主线程可以同步向其他线程发送信号,以暂停垃圾回收。Web 不支持此同步信号,这会阻止 WebAssembly 编译的 C# 代码在多个线程中运行。
Unity 使用仅具有基本功能的 Web 服务器来托管使用 Build and Run(菜单:Build and Run > Edit > Build Profiles)创建的 Web Build。
服务器不支持数据缓存,这会影响:
.data文件,其中包括所有场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息