Unity 6.3
0 онлайн 3 гостей 3 в системе
Вход

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++
Настройки импорта плагина для файлов C++

Поскольку функции связаны вместе с генерируемым кодом 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 файлы, созданные во время сборки
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 требуется этот файл для разрешения управляемых следов стека. Если вы удалите его, вы все равно сможете запустить свою игру, но нет гарантии, что исключения будут генерировать разумные стеки вызовов.

Дополнительные ресурсы: