Unity 6.3
0 онлайн 94 гостей 3 в системе
Вход
Разработка платформы Шаг 239 из 387

Используйте IL2CPP с macOS

Описывает использование плагинов для macOS приложений с использованием промежуточного языка для C++ (./scripting-backends-il2cpp).

IL2CPP — это полностью поддерживаемый скриптовый бэкэнд, который можно использовать в качестве альтернативы Mono при создании проектов для macOS Player.

Когда вы используете IL2CPP для создания проекта, Unity преобразует код промежуточного языка (IL) из скриптов и сборок в C++ перед созданием собственного двоичного файла. См. IL2CPP для дополнительной информации.

Плагины исходного кода C++ для IL2CPP

Вы можете добавить файлы кода C++ (.cpp) непосредственно в Unity Project при использовании IL2CPP. Эти файлы C++ действуют как плагины в Inspector. Если вы настроите файлы C++ для совместимости с macOS Player, Unity компилирует их вместе с кодом C++, который генерируется из управляемых сборок. Дополнительные сведения о конфигурации плагинов см. в Импорт и настройка плагинов.

Сгенерированный код C++ связывает функции вместе, устраняя необходимость в отдельной библиотеке динамических ссылок (DLL). Вместо использования имени DLL используйте ключевое слово "__Internal", чтобы сделать линкер 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++ != nullptr)
        length++;
    return length;
}

Когда линкер разрешает вызов функции, ошибки в объявлении функции на управляемой стороне приводят к ошибке линкера, а не к ошибке выполнения. Это означает, что во время выполнения не требуется динамическая загрузка, а функция вызывается непосредственно из C#. Это снижает нагрузку на производительность вызова P/Invoke.

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