Version: 5.3 (switch to 5.4b)
Оптимизация производительности физики
Подготовка вашего приложения для "In App Purchases" (внутриигровые покупки)

Сборка плагина для iOS

На этой странице описан нативный код плагинов для платформы iOS.

Сборка приложения с нативным плагином для iOS

1 Определите внешний метод в файле C# следующим образом:

[DllImport ("__Internal")]
private static extern float FooPluginFunction();
  1. Установите в редакторе iOS в качестве целевой платформы 1 Добавьте файлы исходного кода в сгенерированный проект XCode, в папку “Classes” (эта папка не будет перезаписана, когда проект будет обновлен, но не забудьте сделать резервную копию вашего кода).

Если вы используете плагин, реализованный на C++ (.cpp) или Objective-C++ (.mm), то вы должны убедиться, что функции объявлены с C-связями, чтобы избежать проблем с коверканьем имён.

extern "C" {
  float FooPluginFunction();
}

Для плагинов, написанных на C или Objective-C, это не требуется, так как эти языки не используют name-mangling.

Использование вашего плагина в C#

Нативные плагины iOS могут быть вызваны только на реальном устройстве, поэтому рекомендуется обернуть все нативные методы кода дополнительным слоем C#-кода. Этот код должен проверить Application.platformи вызывать собственные методы только тогда, когда приложение работает на реальном устройстве; фиктивные значения могут быть возвращены из С#-кода при работе в редакторе. Для примера посмотрите приложение Bonjour.

Обратный вызов C# / JavaScript из нативного кода

Unity IOS поддерживает ограниченную функциональность колбэков от нативного к управляемому коду через UnitySendMessage:

UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");

Эта функция имеет три параметра: имя целевого GameObject, метод скрипта для вызова на этом объекте и строки сообщения, передаваемой вызываемому методу.

Известные ограничения:

  1. Только методы скриптов, которые соответствуют следующему образцу, могут быть вызваны из нативного кода: function MethodName(message:string)
  2. Вызовы UnitySendMessage являются асинхронными и имеют задержку в один кадр.

Автоматизированная интеграция плагин

Unity iOS поддерживает автоматическую интеграцию плагина в ограниченном виде. Все файлы с расширениями .a,.m,.mm,.c,.cpp, расположенные в папке Assets/Plugins/iOS будут добавлены в генерируемый проект Xcode автоматически. Тем не менее, слияние осуществляется через файлы символических ссылок из Assets/Plugins/iOS в конечный пункт назначения, который может влиять на некоторые рабочие процессы. Файлы .h не включаются в дерево проекта Xcode, но они добавляются в файловую систему, что позволяет компилировать файлы .m/.mm/.c/.cpp

Примечание: подпапки в настоящее время не поддерживаются.

iOS советы

  1. Вызовы от управляемого к неуправляемому коду довольно интенсивно используют процессор на iOS. Старайтесь избегать вызова нескольких нативных методов в кадре.
  2. Как уже упоминалось выше, оберните нативные методы дополнительным слоем C#-кода, который вызывает нативный код на устройстве и возвращает фиктивные значения в редакторе.
  3. Строковые значения, возвращаемые из нативного метода должны быть в кодировке UTF–8, кодироваться и выделяться в куче. Сортировочные вызовы Моно бесплатны для строк.
  4. Как уже упоминалось выше, папка “Classes” в проекте Xcode является хорошим местом для хранения нативного кода, потому что он не будет перезаписан, когда проект будет обновлен. 1 Другим хорошим местом для хранения нативного кода является папка Assets или одна из её вложенных папок. Просто добавьте ссылки на файлы нативного кода в проекте XCode: щелкните правой кнопкой мыши на подпапке “Classes” и выберите “Add->Existing files…”.

Примеры

Пример браузера Bonjour

Простой пример использования нативного кода плагина можно найти здесь

Этот пример демонстрирует, как может быть вызван код objective-C из приложения Unity iOS. Это приложение реализует очень простой клиент Bonjour. Приложение состоит из проекта Unity IOS (Plugins/Bonjour.cs является C# интерфейсом для нативного кода, в то время как BonjourTest.js - это скрипт JS, который реализует логику приложения) и нативный код (Assets/Code) , который должен быть добавлен к собранному проекту XCode.

Оптимизация производительности физики
Подготовка вашего приложения для "In App Purchases" (внутриигровые покупки)