Unity 6.3
0 онлайн 94 гостей 3 в системе
Вход
Разработка платформы Шаг 216 из 387

Интеграция Unity в нативные iOS приложения

На этой странице описывается, как интегрировать библиотеку Runtime Unity в нативные приложения iOS с Unity в качестве библиотеки.

Вы можете использовать эту функцию для включения в основное приложение функций, поддерживаемых Unity, таких как 3D/2D Real-Time Rendering, AR Experience, 3D model interaction или 2D mini-games. Библиотека Runtime Unity предоставляет средства управления для управления временем и способом загрузки, активации и выгрузки содержимого в основном приложении.

Как это работает

Чтобы использовать Unity в качестве Библиотеки для iOS, сначала создайте свой проект Xcode как обычно из Unity. Для получения дополнительной информации см. Создание приложения iOS.

Каждый Unity iOS проект Xcode имеет следующую структуру:

  • Часть библиотеки в целевом объекте UnityFramework, которая включает исходный код (включая UnityFramework/UnityFramework.h), плагины и зависимые фреймворки. Создание этого целевого объекта в Xcode создает пакет UnityFramework.framework. Unity не помещает предварительно созданный пакет .framework в папку экспорта.
  • Компонент тонкого запуска в целевом объекте Unity-iPhone, который включает данные представления приложения и запускает библиотеку. Цель Unity-iPhone имеет одну зависимость от цели UnityFramework.

Чтобы интегрировать Unity в другой проект Xcode, объедините оба проекта Xcode (нативный и генерируемый Unity) в одно рабочее пространство Xcode и добавьте встроенные UnityFramework.framework до Фреймворки, библиотеки и встроенное содержимое (или Встроенные двоичные файлы) для цели вашего нативного приложения. Как только вы сделаете это, вы можете использовать UnityFramework класс, чтобы управлять средой выполнения Unity.

Это хранилище содержит примеры проектов и плагинов, демонстрирующих, как интегрировать Unity в проект Xcode вместе с дополнительной документацией.

Класс UnityFramework

После того, как вы загрузите UnityFramework.framework в хост-приложении, управлять Unity runtime через UnityFramework Класс Objective-C. Класс объявлен в UnityFramework/UnityFramework.h и является главным классом бандла фреймворка:

Метод Описание
+ (UnityFramework*)getInstance; Метод класса-одиночки, возвращающий экземпляр UnityFramework.
- (UnityAppController*)appController; Возвращает UnityAppController подкласс UIApplicationDelegate. Это корневой класс Unity на нативной стороне; он даёт доступ к объектам приложения, связанным с View, — например, UIView, UIViewControllers, CADisplayLink, или DisplayConnection.
- (void)setDataBundleId:(const char*)bundleId; Задает Bundle, в котором время выполнения Unity должно искать папку Данные. Дополнительные сведения см. в документации по папке Данные. Вызов этого метода перед вызовом runUIApplicationMainWithArgc или runEmbeddedWithArgc.
- (void)runUIApplicationMainWithArgc:(int)argc argv:(char*[])argv; Способ запуска Unity по умолчанию из главного метода, где нет других Представлений.
- (void)runEmbeddedWithArgc:(int)argc argv:(char*[])argv appLaunchOpts:(NSDictionary*)appLaunchOpts; Вызывайте этот метод, когда вам нужно запустить Unity, когда существуют другие Представления.
- (void)unloadApplication; Вызывайте это для выгрузки Unity и получения обратного вызова UnityFrameworkListener после завершения выгрузки. Unity высвободит большую часть памяти, которую он занимает, но не всю. Вы сможете запустить Unity снова.
- (void)registerFrameworkListener:(id<UnityFrameworkListener>)obj; Зарегистрировать объект прослушивания, который получает обратные вызова событий жизненного цикла UnityFramework.
- (void)unregisterFrameworkListener:(id<UnityFrameworkListener>)obj; Отмена регистрации объекта прослушивания.
- (void)showUnityWindow; Вызов этого метода во время отображения представления, не являющегося Unity, показывает также уже запущенное представление Unity.
- (void)pause:(bool)pause; Пауза Unity.
- (void)setExecuteHeader:(const MachHeader*)header; Вы должны вызвать эту функцию перед запуском Unity, чтобы CrashReporter работал правильно.
- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; Этот метод является прокси для UnitySendMessage. Он находит GameObject по имени и вызывает functionName с однострочным параметром сообщения.
(void)quitApplication:(int)exitCode; Вызывайте это, чтобы полностью разгрузить Unity и получить обратный вызов UnityFrameworkListener когда Unity завершает работу. Unity освободит всю память.

Примечание: Вы не сможете запустить Unity снова в том же процессе после этого вызова. quitHandler на AppController чтобы переопределить стандартное завершение процесса.

Ограничения

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

  • Unity как Библиотека поддерживает только полноэкранное рендеринг, и не поддерживает рендеринг на части экрана.
  • Нельзя загружать более одного экземпляра времени выполнения Unity.
  • Вам может потребоваться адаптировать сторонние плагины (как нативные, так и управляемые) для работы с временем выполнения Unity.
  • Вы не можете настроить видимость строки состояния устройства через iOS Настройки игрока при использовании Unity в качестве Библиотеки в нативном приложении iOS. Рассмотрите возможность использования любого из следующих вариантов для достижения того же:
    • Установите ключ UIStatusBarHidden или UIViewControllerBasedStatusBarAppearance в файле info.plist вашего проекта.
    • Установите свойство контроллера вида prefersStatusBarHidden и вызовите метод setNeedsStatusBarAppearanceUpdate.
    • Установите свойство контроллера представления childViewControllerForStatusBarHidden.