Unity 使用 Emscripten 编译器 工具链将用 C 和 C++ 编写的 Unity 运行时代码交叉编译为 WebAssembly(也称为 Wasm)。Emscripten 生成的代码体积小,加载时间和内存效率高,旨在提供接近原生速度的执行。
Unity 使用 IL2CPPUnity 开发的脚本后端,您可以将其用作在构建某些平台的项目时替代 Mono 的选择。 更多信息
参见 术语表 将 C# 脚本一段代码,允许您创建自己的组件,触发游戏事件,随着时间的推移修改组件属性,并以您喜欢的任何方式响应用户输入。 更多信息
参见 术语表 中的 .NET 游戏代码转换为 Wasm。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 | .bc |
Unity 2018.4 到 Unity 2019.2 | 1.37.40-unity | .bc |
Unity 2018.2 到 Unity 2018.4 | 1.37.33-unity | .bc |
注意
以下列表提供上述表格中列出的文件格式缩略语的扩展
.a
).o
).bc
)对于 Emscripten 2.0 之前的 Emscripten 版本,Unity 建议构建 Bitcode
插件(类型为 .bc
的文件)。从 Emscripten 2.0 开始,Unity 建议构建 Wasm 对象文件
插件,这些插件是类型为 .o
的 Wasm 对象文件,捆绑到类型为 .a
的 GNU 归档文件。
您可以从位于以下位置的 emscripten-version.txt
中确定 Emscripten 工具链的精确版本的路径
C:\Program Files\Unity\Hub\Editor\<Editor version>\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emscripten-version.txt
如果您正在为 Unity 应用程序创建原生 C/C++ 插件,您可以将 C/C++ 代码与您的项目捆绑在一起(参见 原生插件一个特定于平台的原生代码库,它是在 Unity 之外创建的,用于在 Unity 中使用。允许您访问诸如 OS 调用和第三方代码库之类的功能,否则这些功能将不可用。 更多信息
参见 术语表)或使用 Emscripten 编译器工具链将原生代码提前构建为插件存档。
如果您选择提前构建插件代码,则应使用 Emscripten 编译器工具链。为了确保 LLVM 二进制格式 兼容性,用于编译插件的 Emscripten 版本必须与 Unity 使用的 Emscripten 版本匹配。
通常,插件被编译为静态库存档格式。对于 Unity 2021.2 之前的版本(Emscripten 2.0),LLVM 位代码文件格式 (.bc
) 是首选的插件格式。
从 Unity 2021.2 开始,首选的插件格式是包含 WebAssembly 对象文件 (.o
) 的 GNU 归档文件格式 (.a
)。虽然仍然支持早期的 LLVM 位代码 .bc 插件文件,但使用它们可能会对编译时间产生负面影响。
注意:当将原生插件从一个 Unity 版本迁移到使用不同 Emscripten 版本的版本时,Unity 建议从源代码重新编译 Unity 插件,因为 LLVM 编译器项目不保证构建工件文件在不同编译器版本之间的二进制兼容性。
如果编译 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 |