Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Создание плагинов для iOS

На этой странице описывается, как создавать плагины собственного кода для iOSМобильная операционная система Apple. Подробнее
См. на платформе Словарь
.

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

Чтобы создать приложение с помощью собственного подключаемого модуляНабор кода, созданный вне Unity, который создает функциональные возможности в Unity. В Unity можно использовать два типа подключаемых модулей: управляемые подключаемые модули (управляемые сборки .NET, созданные с помощью таких инструментов, как Visual Studio) и собственные подключаемые модули (библиотеки собственного кода для конкретной платформы). Подробнее
см. Словарь
для iOS, выполните следующие действия:

  1. Для каждой нативной функции, которую вы хотите вызвать, определите внешний метод в файле C# следующим образом:

    [DllImport ("__Internal")] private static extern float FooPluginFunction();
  2. Добавьте исходные файлы собственного кода в проект Unity.

  3. Настройте параметры подключаемого модуля в окне Инспектора подключаемых модулей. Например, если ваш нативный код специфичен для iOS, убедитесь, что подключаемый модуль включен только для iOS.

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

extern "C" { float FooPluginFunction(); }

Для подключаемых модулей, написанных на C или Objective-C, это не требуется, поскольку эти языки не используют искажение имен.

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

Ваше приложение может вызывать только нативные подключаемые модули iOSнативную библиотеку кода для конкретной платформы, созданную вне Unity для использовать в единстве. Позволяет вам получить доступ к таким функциям, как вызовы ОС и сторонние библиотеки кода, которые в противном случае были бы недоступны для Unity. Подробнее
См. в Словарь
, когда он развернут на реальном устройстве, поэтому вам следует оберните все собственные методы кода дополнительным слоем кода C#. Этот код должен либо использовать условную компиляцию UNITY_IOS && !UNITY_EDITOR, либо проверять Application.platform и вызывать собственные методы только тогда, когда приложение работает на устройстве. Простой способ реализовать это:

void MyMethod() { #if UNITY_IOS && !UNITY_EDITOR CallNativeMethodImplementation(); #else CallEditorMethodImplementation(); #endif }

Чтобы получить более подробную информацию, загрузите образец браузера Bonjour ниже.

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

Unity iOS поддерживает ограниченную функциональность обратного вызова из исходного кода в управляемый. Это можно сделать одним из двух способов:

  • Использование UnitySendMessage
  • Через делегатов

Использование UnitySendMessage

Этот вариант проще, но имеет некоторые ограничения. Это выглядит так:

UnitySendMessage("GameObjectName1", "MethodName1", "Сообщение для отправки");

Есть три параметра:

  • Имя целевого GameObject
  • Метод скрипта для вызова этого объекта
  • Строка сообщения для передачи вызываемому методу

Использование UnitySendMessage имеет следующие ограничения:

  1. Из нативного кода можно вызывать только методы скрипта, соответствующие следующей сигнатуре: void MethodName(string message);.
  2. Вызовы UnitySendMessage являются асинхронными и имеют задержку в один кадр.
  3. Если два или более GameObjectsОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки , и более. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
    См. в Словарь
    имеют одинаковое имя, это может вызвать конфликты при использовании UnitySendMessage.

Использование делегатов

Это более сложный вариант. При использовании делегатов метод на стороне C# должен быть статическим и помечен атрибутом MonoPInvokeCallback. Вы должны передать метод в качестве делегата внешнему методу, который реализован в машинном коде как функция, принимающая указатель на функцию с соответствующей сигнатурой. Указатель функции в машинном коде затем ведет обратно к статическому методу C#.

Код C# для этого метода выглядит следующим образом:

delegate void MyFuncType(); [AOT.MonoPInvokeCallback(typeof(MyFuncType))] static void MyFunction() { } static extern void RegisterCallback(MyFuncType func);

Код C, который принимает обратный вызов, выглядит следующим образом:

typedef void (*MyFuncType)(); void RegisterCallback(MyFuncType func) {}

Автоматическая интеграция плагинов

Unity поддерживает автоматическую интеграцию плагинов и копирует все файлы со следующими расширениями в сгенерированный проект Xcode, если вы включили их для iOS в Инспекторе плагиновОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
См. в окне Словарь
: .a, .m , .mm, .c, .cpp, .h. Если какие-либо файлы с этими расширениями находятся в папке Assets/Plugins/iOS, Unity разрешает их только для платформы iOS.

Примечание. После того как файлы будут скопированы в сгенерированный проект Xcode, они больше не будут связаны со своими аналогами в вашем проекте Unity. Если вы измените эти файлы в Xcode, вы должны скопировать их обратно в свой проект Unity. В противном случае Unity перезапишет их при следующем создании проекта.

Это окно инспектора показывает, что подключаемый модуль был включен для iOS..
Это окно инспектора показывает, что подключаемый модуль был включен для iOS.

Советы для iOS:

  1. Вызовы между управляемыми и неуправляемыми устройствами на iOS довольно сильно загружают процессор. Старайтесь не вызывать несколько нативных методов для одного кадра.

  2. Оберните собственные методы дополнительным слоем C#, который вызывает собственный код на устройстве и возвращает фиктивные значения в редакторе.

  3. Строковые значения, возвращаемые собственным методом, должны быть закодированы в кодировке UTF–8 и размещены в куче. Моносортировка вызовов для таких строк бесплатна.

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

Вы можете скачать простой пример использования подключаемого модуля собственного кода здесь: Пример браузера Bonjour.

В этом примере показано, как можно вызывать код Objective-C из приложения Unity iOS. Это приложение реализует простой клиент Bonjour и состоит из:

  • Проект Unity iOS, в котором Plugins\Bonjour.cs — это интерфейс C# для собственного кода, а BonjourTest.cs скрипт, реализующий логику приложения
  • Собственный код (расположенный в Assets/Plugins/iOS), который следует добавить в созданный проект Xcode, как описано в разделе Автоматическая интеграция подключаемых модулей раздел выше
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3