Windows Игрок: IL2CPP Базовый Скрипт
Вы можете использовать IL2CPP в качестве альтернативы Mono для скриптов backend при создании проектов для Windows Player.
При сборке Project с помощью IL2CPP, Unity преобразует код IL из скриптов и сборок в C++ перед созданием собственного двоичного файла. См. IL2CPP для получения дополнительной информации.
C++ плагины исходного кода для IL2CPP
Вы можете добавить файлы кода C++ (.cpp) непосредственно в Unity Project при использовании IL2CPP скриптового бэкенда. Файлы C++ действуют как плагины в Plugin Inspector. Если вы настроите файлы C++ для совместимости с Windows Player, Unity компилирует их вместе с кодом C++, который генерируется из управляемых сборок.
Чтобы просмотреть настройки импортера плагинов для файлов C++, щелкните файл .cpp и выберите соответствующую опцию Windows в разделе Настройки платформы Inspector:
Поскольку функции связаны вместе с генерируемым кодом C++, не существует отдельного DLL для _P/Invoke. Из-за этого вы можете использовать ключевое слово “__Internal” вместо имени DLL, что делает ответственность линкера C++ за разрешение функций, а не загрузку их во время выполнения, как показано в следующем примере:
[DllImport("__Internal")]
private static extern int
CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);
В NativeFunctions.cpp можно определить функцию такого рода следующим образом:
extern "C" __declspec(dllexport) int __stdcall CountLettersInString(wchar_t* str)
{
int length = 0;
while (*str++ != L'\0')
length++;
return length;
}
Поскольку линкер разрешает вызов функции, любая ошибка, сделанная в объявлении функции на управляемой стороне (C# код, выполняемый в управляемом времени выполнения), приводит к ошибке линкера, а не к ошибке времени выполнения. Это означает, что во время выполнения не может происходить динамическая загрузка, и функция вызывается непосредственно из C#, что значительно снижает нагрузку на производительность вызова P/Invoke.
Unity компилирует исходный код плагинов с тем же C++ аргументы компилятора как генерируемые C++ код, который не может быть изменен. Если исходный код плагина требует контроля над C++ аргументов компилятора, вместо этого необходимо создать собственный плагин. Дополнительные сведения см. Нативный плагин.
IL2CPP файлы сборки
Проект, использующий IL2CPP скриптовый бэкэнд, обычно производит следующие файлы:
Следующие файлы являются общими для проектов, использующих IL2CPP:
| Файл: | Описание: |
|---|---|
| a_Data | Папка с игровыми данными. |
| a.exe | Главный исполняемый файл игры. |
| UnityCrashHandler64.exe | Исполняемый файл обработчика сбоев. |
| UnityPlayer.dll | Unity Библиотека проигрывателя, содержащая весь нативный код. |
| WinPixEventRuntime.dll | PIX для времени выполнения Windows. Этот файл присутствует только в сборках для разработки. |
| a_BackUpThisFolder_ButDontShipItWithYourGame | Папка, содержащая данные, необходимые для отладки вашей игры, включая файлы PDB (информация об отладке) и код C++, генерируемый вашими скриптами. Вы должны резервировать эту папку для каждой сборки, которую отправляете, но не перераспространяйте ее. |
| GameAssembly.dll | Библиотека, которая содержит время выполнения IL2CPP и весь код вашего скрипта. |
| SymbolMap | Файл, содержащий список всех адресов управляемых функций и их длины. IL2CPP требуется этот файл для разрешения управляемых следов стека. Если вы удалите его, вы все равно сможете запустить свою игру, но нет гарантии, что исключения будут генерировать разумные стеки вызовов. |
Дополнительные ресурсы:
- Плагин Inspector
- IL2CPP
- Использование P/Вызывание