Version: 6000.3
语言: 中文
替换已弃用的浏览器交互代码
Unity Web 中的内存

Emscripten 的 Web 原生插件

Unity 使用 Emscripten 编译器工具链将用 C 和 C++ 编写的 Unity 运行时代码交叉编译为 WebAssembly(也称为 Wasm)。Emscripten 生成小代码,加载时间和内存效率高,旨在提供接近本机速度的执行。

Unity 使用IL2CPP Unity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代方案。更多信息
请参阅术语表
转换 C# 中的 .NET 游戏代码脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
到瓦斯姆。IL2CPP 获取 .NET 字节码并将其转换为相应的 C++ 源文件,然后使用 Emscripten 进行编译以将您的脚本转换为 Wasm。

目标版本

Unity 将 Emscripten 编译器与 Web 平台包捆绑在一起,因此您不必手动下载它。编辑器使用的 Emscripten 版本因编辑器版本而异:

Unity 版本 Emscripten 版本 支持的本机插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。更多信息
请参阅术语表
文件格式
Unity 2023.2 及更高版本 Emscripten 3.1.38-unity .a、.bc
Unity 2022.2 及更高版本 Emscripten 3.1.8-unity .a、.bc
Unity 2021.2 及更高版本 Emscripten 2.0.19.6-unity .a、.bc
Unity 2019.2 至 2021.1 1.38.11-统一 。公元前
Unity 2018.4 至 Unity 2019.2 1.37.40-统一 。公元前
Unity 2018.2 至 Unity 2018.4 1.37.33-统一 。公元前

笔记:

  • 以下列表提供了上表中列出的文件格式首字母缩略词的扩展:

    • GNU 存档文件格式 (.a)
    • WebAssembly 对象文件 (.o)
    • LLVM Bitcode 文件格式 (.bc)
  • 对于 Emscripten 2.0 之前的 Emscripten 版本,Unity 建议构建Bitcode插件(类型.bc).从 Emscripten 2.0 开始,Unity 建议构建Wasm Object File插件,这些插件是 Wasm 对象文件类型.o,捆绑到 GNU 存档文件中.a.

您可以从emscripten-version.txt位于:

C:\Program Files\Unity\Hub\Editor\<Editor version>\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emscripten-version.txt

使用 Emscripten 编译本机插件

如果您要为 Unity 应用程序创建本机 C/C++ 插件,则可以将 C/C++ 代码与项目捆绑在一起(请参阅本机插件Unity 外部创建以在 Unity 中使用的特定于平台的本机代码库。允许您访问作系统调用和第三方代码库等功能,否则 Unity 无法使用这些功能。更多信息
请参阅术语表
)或使用 Emscripten 编译器工具链提前将本机代码构建到插件存档中。

如果您选择提前构建插件代码,则应使用 Emscripten 编译器工具链。为确保 LLVM 二进制格式兼容性,用于编译插件的 Emscripten 版本必须与 Unity 使用的 Emscripten 版本匹配。

通常,插件被编译为静态库存档格式。对于 Unity 2021.2 (Emscripten 2.0) 之前的版本,LLVM Bitcode 文件格式 (.bc) 是首选插件格式。

从 Unity 2021.2 开始,首选插件格式是 GNU 存档文件格式 (.a) 包含 WebAssembly 对象文件 (.o).尽管仍然支持早期的 LLVM Bitcode .bc 插件文件,但使用它们可能会对编译时间产生负面影响。

注意:将本机插件从一个 Unity 版本迁移到使用不同版本 Emscripten 的版本时,Unity 建议从源代码重新编译 Unity 插件,因为 LLVM 编译器项目不保证构建工件文件在编译器版本之间的二进制兼容性。

Emscripten 构建标志

如果编译 WebAssembly 对象文件以与 WebAssembly 2023 或 C/C++ 多线程一起使用,请包含以下 Emscripten 构建标志。如果没有这些标志,代码可能无法与使用 Unity 构建的代码正确链接。

目标 所需的 Emscripten 构建标志
WebAssembly 2023 -msimd128 -fwasm-exceptions -mbulk-memory -mnontrapping-fptoint -msse4.2 -sWASM_BIGINT -sSUPPORT_LONGJMP=wasm
C/C++ 本机多线程 -pthread

其他资源:

替换已弃用的浏览器交互代码
Unity Web 中的内存