Если вы хоть раз сталкивались с разработкой приложений дополненной реальности в Unity, то знаете, сколько с этим связано неудобств. С плохой документацией и малым количеством обучающих ресурсов ещё можно смириться, но с чем вообще нельзя жить, так это с отсутствием возможности тестировать AR прямо в редакторе.
Ситуация с AR-разработкой в Unity
Вокруг только и разговоров про дополненную реальность. Но средства разработки абсолютно не отвечают уровню хайпа. Сейчас при малейшем изменении проекта приходится делать новый билд. А процесс создания билда может занимать от минуты до десятка минут для крупного проекта.
Для отладки приходится использовать или старую добрую консоль, или плагины, которые позволяют посмотреть на состояние объектов прямо в билде:
Как упростить процесс отладки
Лучшее, что я находил до этого времени — это плагин arfoundation-mock, который позволяет генерировать фейковые AR-данные в редакторе. Он сильно ускоряет процесс разработки, но далёк от создания условий реального мира.
Сделать лучше
На самом деле, лучшее решение — передавать данные с телефона прямо в редактор. В прошлом было несколько попыток от сотрудников Unity сделать подобное. Но все реализации или быстро устаревали, или вовсе не работали как нужно. Чувствуя боль многих разработчиков, я решил сделать собственное решение — AR Foundation Editor Remote.
AR Foundation — это абстракция над несколькими технологиями дополненной реальности, в числе которых ARKit, ARCore, Magic Leap, HoloLens и другие. AR Foundation позволяет писать один код сразу для многих платформ. Если вы сделали игру для iOS с помощью AR Foundation, то портировать ее на Android не составит никакого труда. Используя эту волшебную черту софта Unity, я написал плагин, который позволяет подключать к редактору любое устройство. Для этого придётся однократно сбилдить сцену, запустить её на устройстве, а дальше использовать только редактор Unity.
Как я создал этот плагин
AR Foundation Editor Remote стал моим первым продуктом для других разработчиков. Мне всегда было интересно выпустить что-то на Asset Store, так как, в отличие от игр, это чисто программный продукт, а в играх приходится делать графику, дизайн уровней и много других вещей, не связанных с программированием. Хотелось сосредоточиться на коде.
До выпуска плагина я имел опыт только в разработке игр и приложений. В разработке моей последней игры такой плагин очень пригодился бы, но его не было. И мне приходилось пользоваться полурабочим ARKit Remote.
После починки нескольких его багов я начал задумываться над тем, чтобы написать собственное решение для AR Foundation. Но одно дело — написать рабочий код, а другое — выпустить продукт и заниматься его развитием и поддержкой. Тогда на это не было времени.
Но вот, время появилось, и я решил заняться тем, чего давно хотел. Как это часто бывает в программировании, первый результат появился достаточно быстро. За несколько дней я сделал трекинг плоскостей и облачных точек. А вот довести плагин до релиза заняло полторы недели.
Самая большая сложность заключалась в управлении зависимостями: нужен был способ установки модулей Unity, которые требуются для работы плагина. При распространении через Asset Store невозможно явно указать зависимости. Такая возможность есть у Unity Package Manager, потому единственным решением было установить плагин из git-репозитория.
В итоге, мой плагин устанавливает из Asset Store свой инсталлятор, а инсталлятор, в свою очередь, производит установку из закрытого git-репозитория. Достаточно костыльное решение, которое грозило тем, что меня не пропустят в Asset Store. Но всё сработало! Теперь большая часть установки автоматизирована, и пользователям не придётся вручную устанавливать нужные зависимости.
Технологический стек
Весь плагин написан на чистом C# без использования сторонних библиотек или нативного кода, а общение редактора с устройством осуществляется с помощью классов PlayerConnection и EditorConnection. Это делает плагин независимым от сторонних решений и облегчает поддержку будущих версий Unity, а другим разработчикам даёт полный доступ к коду на случай если придется «допилить» плагин под себя.
Основные затруднения
Самое большое количество затруднений проистекает из решения поддерживать несколько версий Unity и несколько версий AR Foundation. Из своего опыта разработки я знаю, что обновлять Unity посреди проекта — очень опасная затея. Большинство разработчиков старается не делать этого без веской причины.
Я принял решение поддерживать сразу три версии Unity: 2019.2, 2019.3 и 2020.1. Ниже версии 2019.2 опуститься невозможно, так как в ней много критических изменений, которые открыли возможность для написания плагина.
К тому же, я решил поддерживать две версии AR Foundation — третью и четвёртую. Я не силён в комбинаторике, но три версии юнити и две версии AR Foundation, вроде, дают шесть разных комбинаций, и приходится тестировать их все. А если добавить тот факт, что у пользователя может быть установлен или не установлен трекинг лица в iOS, то… лучше просто об этом не думать.
Ограничения AR Foundation Editor Remote
Пока что в плагине реализованы не все AR-системы. Сейчас есть трекинг плоскостей, положения камеры в пространстве, трекинг глубины, трекинг лиц (включая ARKit Blendshapes) и трекинг изображений. Остальные системы я буду добавлять по мере развития плагина. Но даже с этими ограничениями плагин сэкономит десятки часов, которые пришлось бы потратить в ожидании билдов.
Весь прошлый месяц я занимался развитием плагина и добавлял в него поддержку систем, которые больше всего просили люди. Если у вас есть пожелания, пишите их на kuzykkirill@gmail.com, это ускорит добавление нужных фич.
Ссылки:
- Asset Store: https://assetstore.unity.com/packages/tools/utilities/ar-foundation-editor-remote-168773
- Сайт: https://stampedegames.net/ar-foundation-remote.html
- Itch.io: https://kyrylokuzyk.itch.io/ar-foundation-remote
Не пропускайте важнейшие новости о дополненной, смешанной и виртуальной реальности — подписывайтесь на Голографику в Telegram, ВК, Twitter и Facebook!
Далее: Мы стремимся расширять границы мышления: путь Jedium от Hardcode до ВР-конструктора