Используйте 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.