Веб-плагины для Emscripten
Unity использует Emscripten компилятор toolchain для перекрестной компиляции Unity исполняемого кода, написанного на C и C++ в WebAssembly (также называемый Wasm). Emscripten генерирует небольшой код, эффективный с точки зрения времени загрузки и памяти, и стремится обеспечить почти нативную скорость выполнения.
Unity использует IL2CPP для преобразования игрового кода .NET из скриптов C# в Wasm. IL2CPP преобразует байт-код .NET в соответствующие исходные файлы C++, которые затем компилируются с помощью Emscripten, чтобы преобразовать скрипты в Wasm.
Целевые версии
Unity объединяет компилятор Emscripten с пакетом веб-платформы, так что вам не нужно загружать его вручную. Версия Emscripten, используемая Редактором, зависит от версии Редактора:
| Unity Версия | Emscripten версия | Поддерживаемые форматы файлов плагинов |
|---|---|---|
| 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 |
Примечания:
-
В следующем списке приведено расширение для сокращений форматов файлов, перечисленных в таблице выше:
- Формат архивного файла GNU (
.a) - WebAssembly Объектные файлы (
.o) - LLVM Формат файла биткода (
.bc)
- Формат архивного файла GNU (
Для версий Emscripten, предшествующих Emscripten 2.0, Unity рекомендует построить плагины
Bitcode(файлы типа.bc). Начиная с Emscripten 2.0, Unity рекомендует построить плагиныWasm Object File, которые являются объектными файлами Wasm типа.o, сгруппированными в архивные файлы GNU типа.a.
Вы можете определить путь к точной версии Emscripten toolchain из emscripten-version.txt, расположенного по адресу:
C:\Program Files\Unity\Hub\Editor\<Editor version>\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emscripten-version.txt
Компиляция собственных плагинов с помощью Emscripten
Если вы создаете нативный C/C++ плагины для Unity приложения, вы можете либо сгруппировать C/C++ код с вашим проектом (см. Нативные плагины) или построить нативный код в архив плагина заранее с помощью Emscripten инструментарий компилятора.
Если вы решили заранее построить код плагина, вам следует использовать цепочку инструментов компилятора Emscripten. Чтобы обеспечить совместимость двоичного формата LLVM с, версия Emscripten, используемая для компиляции плагинов, должна соответствовать версии Emscripten, используемой Unity.
Как правило, плагины компилируются в формат архива статической библиотеки. Для версий до Unity 2021.2 (Emscripten 2.0) формат файлов LLVM Bitcode (.bc) является предпочтительным форматом плагина.
С Unity 2021.2, предпочтительным форматом плагина является GNU архивный формат файла (.a), который содержит WebAssembly объектные файлы (.o). Хотя ранние LLVM биткоды .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 |