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

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

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

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

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

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

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.

Использование вашего плагина в 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

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

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.

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