Подключить экспортированный проект Unity

Недавно я столкнулся с задачей, в которой мне нужно было встроить модуль Unity AR в существующее iOS-приложение.

При чтении документации Unity выясняется, что начиная с версии 2019.3 Unity поддерживает загрузку и выгрузку игры Unity из нативного приложения для iOS или Android с помощью функции Unity как библиотека.

Хотя сама документация была довольно полной, все же некоторые моменты были упущены, поэтому я сделал это пошаговое руководство, так что давайте начнем.

Создать iOS-проект

Сначала создайте пустой проект iOS внутри рабочей области. Простой способ сделать это — сначала создать пустой проект Xcode, а затем перейти к File → Save As Workspace. Назовем и проект, и рабочее пространство SwiftUnity.

Важно: убедитесь, что вы выбрали Storyboard в качестве интерфейса, эти шаги необходимы, даже если вы хотите использовать SwiftUI, поскольку они необходимы для работы интеграции Unity.

Обратите внимание: если вы хотите использовать проект SwiftUI, не забудьте установить минимальную цель развертывания iOS на 13.0.0.

Настройка проекта Unity

Поскольку здесь мы в основном сосредоточены на iOS, я не буду углубляться в объяснение Unity и сосредоточусь только на той части, где мы будем выгружать модуль Unity из приложения iOS.

Однако один важный шаг, который нам нужно выполнить, — это вызвать Application.Unload() в разделе, где мы хотим вернуться к нашему приложению iOS из Unity.

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

Теперь предположим, что в модуле Unity вы поместили точку выхода, где вы хотите ее закрыть, и эта точка выхода связана с некоторой кнопкой в ​​модуле Unity. Поэтому просто вызовите Application.Unload(), как показано ниже:

Теперь, когда вы закончите с предыдущим шагом, откройте проект Unity, перейдите в Файл → Настройки сборки. Здесь вам нужно будет изменить платформу с ПК, Mac и Linux Standalone на iOS, затем нажать кнопку «Переключить платформу». Вам нужно немного подождать, пока Unity перекомпилируется.

Пришло время экспортировать наш проект Unity как проект iOS. Вам не нужно менять какие-либо настройки, просто нажмите «Создать». Вы экспортируете проект Unity в папку с именем UnityBuild. Итак, теперь ваша структура папок должна выглядеть так

Встроить Unity в iOS

Теперь самое интересное начинается, когда мы подключаем экспортированный проект Unity к нашему приложению для iOS. Откройте swiftUnity.xcworkspace, который в настоящее время содержит только проект SwiftUnity.

В Finder найдите проект UnityExport и перетащите файл
Unity-iPhone.xcodeproj в рабочую область.

Теперь и swiftUnity.xcodeproj, и Unity-iPhone.xcodeproj принадлежат одной и той же рабочей области. Затем щелкните проект swiftUnity и выберите цель swiftUnity.

В меню «Общие» прокрутите вниз до раздела «Платформы, библиотеки и встроенный контент». Нажмите кнопку +, чтобы добавить новый фреймворк.

Выберите UnityFramework.framework из списка и добавьте его в проект.

Затем выберите папку Data в проекте Unity-iPhone. На правой панели вы увидите раздел «Целевое членство». Вам нужно поставить галочку рядом с UnityFramework.

Затем откройте Info.plist и удалите запись Application Scene Manifest. Это временно нарушит работу приложения, но мы решим эту проблему позже в AppDelegate. Если вы пропустите этот шаг, вы не сможете вернуться к своему приложению iOS (после вызова Application.Unload()) после запуска экземпляра Unity.

Теперь создайте файл swift в swiftUnity и назовите его Unity. Добавьте в этот файл следующий код.

Откройте AppDelegate.swift и удалите все функции, связанные со сценой. Нам также нужно будет передать здесь ссылку на главное окно приложения в Unity, так как это окно, к которому мы вернемся после выгрузки игры Unity.

После этих изменений ваш AppDelegate должен выглядеть так:

Теперь в вашем существующем проекте Xcode перейдите в раздел, где вы хотите открыть модуль единства, в моем случае я просто добавлю кнопку на раскадровку и открою модуль единства, чтобы открыть его IBAction.

Вот и все, теперь пришло время запустить и протестировать приложение.

Распространенные проблемы: если Xcode не может собрать проект после выполнения всех описанных выше шагов и выдает сообщение об ошибке "Нет такого модуля UnityFramework", просто выберите UnityFramework сверху и нажмите ⌘+B:

Как только это будет сделано, выберите Unity-iPhone и сделайте то же самое, и в конце выберите обратно свой проект iOS, т.е. swiftUnity в нашем случае, и запустите проект.

Еще одно важное замечание, о котором следует помнить, — запускать проект на реальном устройстве, а не на симуляторе.

Окончательный вид