На этой странице описан нативный код плагинов для платформы iOS.
1 Определите внешний метод в файле C# следующим образом:
[DllImport ("__Internal")]
private static extern float FooPluginFunction();
If you are using C++ (.cpp) or Objective-C++ (.mm) to implement the plugin you must ensure the functions are declared with C linkage to avoid name mangling issues.
extern "C" {
float FooPluginFunction();
}
Для плагинов, написанных на C или Objective-C, это не требуется, так как эти языки не используют name-mangling.
Нативные плагины iOS могут быть вызваны только на реальном устройстве, поэтому рекомендуется обернуть все нативные методы кода дополнительным слоем C#-кода. Этот код должен проверить Application.platformи вызывать собственные методы только тогда, когда приложение работает на реальном устройстве; фиктивные значения могут быть возвращены из С#-кода при работе в редакторе. Для примера посмотрите приложение Bonjour.
Unity IOS поддерживает ограниченную функциональность колбэков от нативного к управляемому коду через UnitySendMessage:
UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
Эта функция имеет три параметра: имя целевого GameObject, метод скрипта для вызова на этом объекте и строки сообщения, передаваемой вызываемому методу.
Известные ограничения:
function MethodName(message:string)
Unity iOS поддерживает автоматическую интеграцию плагина в ограниченном виде. Все файлы с расширениями .a,.m,.mm,.c,.cpp, расположенные в папке Assets/Plugins/iOS будут добавлены в генерируемый проект Xcode автоматически. Тем не менее, слияние осуществляется через файлы символических ссылок из Assets/Plugins/iOS в конечный пункт назначения, который может влиять на некоторые рабочие процессы. Файлы .h не включаются в дерево проекта Xcode, но они добавляются в файловую систему, что позволяет компилировать файлы .m/.mm/.c/.cpp
Примечание: подпапки в настоящее время не поддерживаются.
Простой пример использования нативного кода плагина можно найти здесь
This sample demonstrates how objective-C code can be invoked from a Unity iOS application. This application implements a very simple Bonjour client. The application consists of a Unity iOS project (Plugins/Bonjour.cs is the C# interface to the native code, while BonjourTest.js is the JS script that implements the application logic) and native code (Assets/Code) that should be added to the built Xcode project.