Подключить экспортированный проект 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
в нашем случае, и запустите проект.
Еще одно важное замечание, о котором следует помнить, — запускать проект на реальном устройстве, а не на симуляторе.