На этой странице описывается, как интегрировать библиотеку времени выполнения Unity в iOSмобильную операционную систему Apple. Подробнее
См. в Словарь собственные приложения с функцией Unity как библиотека.
Эту функцию можно использовать для включения функций Unity, таких как 3D/2D-рендеринг в реальном времени, ARAugmented Reality (AR) использует компьютерную графику или видео, наложенное поверх прямой видеотрансляции, чтобы дополнить представление и создать взаимодействие с реальными и виртуальными объектами.
См. в Словарь Опыт взаимодействия с 3D-моделями или 2D-мини-игры в ваше родное приложение. Библиотека среды выполнения Unity предоставляет элементы управления для управления тем, когда и как загружать, активировать и выгружать контент в вашем родном приложении.
Как это работает
Чтобы использовать Unity в качестве библиотеки для iOS, сначала создайте свой проект Xcode, как обычно, из Unity (дополнительную информацию см. в разделе Настройки сборки для iOS).
Каждый проект Unity iOS Xcode имеет следующую структуру:
- Часть библиотеки в целевом объекте UnityFramework, которая включает исходный код, подключаемые модулинабор кода, созданного вне Unity, который создает функциональность в Unity. В Unity можно использовать два типа подключаемых модулей: управляемые подключаемые модули (управляемые сборки .NET, созданные с помощью таких инструментов, как Visual Studio) и собственные подключаемые модули (библиотеки собственного кода для конкретной платформы). Подробнее
См. в Словаре и зависимых платформах. Он также создает файл UnityFramework.framework. - Тонкая часть средства запуска в целевом объекте Unity-iPhone , которая включает данные представления приложения и запускает библиотеку. Цель Unity-iPhone имеет одну зависимостьВ контексте диспетчера пакетов зависимость конкретная версия пакета (выраженная в форме
имя_пакета@версия_пакета
), которая требуется проекту или другому пакету для работы. Проекты и пакеты используют атрибут dependencies в своих манифестах для определения набора требуемых пакетов. Для проектов это считается прямой зависимостью; для пакетов это косвенные или транзитивные зависимости. Подробнее
См. в Словаре цель UnityFramework.
Чтобы интегрировать Unity в другой проект Xcode, необходимо объединить оба проекта Xcode (собственный и созданный Unity) в одну рабочую область Xcode и добавить файл UnityFramework.framework в Раздел Встроенные двоичные файлы цели Приложение для собственного проекта Xcode. После этого вы можете использовать класс UnityFramework
для управления средой выполнения Unity.
Этот репозиторий содержит примеры проектов и подключаемые модули, демонстрирующие, как интегрировать Unity в проект Xcode, а также дополнительную документацию.
Класс UnityFramework
Вы можете управлять средой выполнения Unity с помощью экземпляра класса UnityFramework
Objective-C, который является основным классом UnityFramework.framework:< /p>
Метод | Описание |
---|---|
+ (UnityFramework*)getInstance; |
Метод класса Singleton, который возвращает экземпляр в UnityFramework . |
- (UnityAppController*)appController; |
Возвращает подкласс UnityAppController класса UIApplicationDelegate . Это корневой класс Unity на собственной стороне, и он может обращаться к объектам приложения, связанным с представлением, таким как UIView , UIViewControllers . , CADisplayLink или DisplayConnection . |
- (void)setDataBundleId:(const char*)bundleId; |
Задает пакет, в котором среда выполнения Unity должна искать папку Data. Дополнительные сведения см. в документации по папке данных. Вызовите этот метод перед вызовом 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 |
Зарегистрируйте объект прослушивателя, который получает обратные вызовы событий, связанных с жизненным циклом UnityFramework. |
- (void)unregisterFrameworkListener:(id |
Отменить регистрацию объекта прослушивателя. |
- (void)showUnityWindow; |
Вызовите этот метод во время отображения представления, отличного от Unity, чтобы также отобразить представление Unity, которое уже запущено. |
- (void)pause:(bool)pause; |
Пауза единства. |
- (void)setExecuteHeader:(const MachHeader*)header; |
Вы должны вызвать это перед запуском Unity, чтобы CrashReporter работал правильно. |
- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; |
Этот метод является прокси для UnitySendMessage. Он находит игровой объект по имени и вызывает functionName с однострочным параметром сообщения. |
(void)quitApplication:(int)exitCode; |
Вызовите это, чтобы полностью выгрузить Unity и получить обратный вызов UnityFrameworkListener при завершении работы Unity. Unity освободит всю память.
Примечание. После этого вызова вы не сможете снова запустить Unity в том же процессе. Вы можете установить |
Ограничения
Unity не контролирует жизненный цикл среды выполнения, поэтому Unity как библиотека может работать не во всех возможных случаях использования. Известные ограничения включают:
- Unity как библиотека поддерживает только полноэкранный рендеринг и не поддерживает рендеринг части экрана.
- Вы не можете загрузить более одного экземпляра среды выполнения Unity.
- Возможно, вам потребуется адаптировать сторонние подключаемые модули (как собственные, так и управляемые) для работы со средой выполнения Unity. .
- Unity как библиотека для iOS добавлена в 2019.3