Как я создал Unity-плагин для тестирования дополненной реальности в редакторе

3
433

Если вы хоть раз сталкивались с разработкой приложений дополненной реальности в 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, это ускорит добавление нужных фич.

Ссылки:

Не пропускайте важнейшие новости о дополненной, смешанной и виртуальной реальности — подписывайтесь на Голографику в TelegramВКTwitter и Facebook!    

Далее: Мы стремимся расширять границы мышления: путь Jedium от Hardcode до ВР-конструктора