Развертывание и оптимизация UG для Meta Quest

Для Continuum XR разработка UG для Meta Quest означала объединение сбора существ, социального взаимодействия и игрового процесса в VR , основанного на физике, в масштабируемый многопользовательский режим для автономных гарнитур. Вдохновленная коллекционированием существ и играми про управление мехами, UG позволяет игрокам собирать динозавров, выполняя задания, торгуя и покупая их, а затем ездить на них, используя передвижение, подобное передвижению горилл.
Для обеспечения такого уровня удобства необходимо было сбалансировать многопользовательскую сетевую составляющую, рабочие процессы развертывания и оптимизацию производительности на оборудовании Meta Quest. Команде также необходимо было обеспечить поддержку обновлений в реальном времени, сетевых систем и взаимодействия в VR -играх, сохраняя при этом стабильную производительность на мобильном оборудовании.
Мы поговорили с разработчиками VR Марком Минеханом и Конрадом Даггером, а также с ассоциированным продюсером Халой Лувьер о создании и развертывании UG с помощью Unity, оптимизации сети и производительности для автономной VR, а также о масштабировании многопользовательской VR игры в реальном времени на устройствах Meta Quest.
Каковы были ваши основные технические цели?
Марк Минехан: Для Meta Quest было важно, чтобы игра работала плавно, несмотря на масштаб UG . Мы тестировали и другие движки, но Unity обеспечил наилучшую поддержку и производительность. Режим общего доступа Photon Fusion 2 хорошо масштабируется, поскольку большая часть сетевых операций выполняется на стороне клиента, что делает разработку доступной и масштабируемой.
Unity предоставила необходимые нам интеграции и поддержку, поэтому мы использовали существующие инструменты, вместо того чтобы создавать сетевой стек или игровой движок с нуля.
Как вы структурировали конвейер сборки в Unity для обеспечения эффективного развертывания VR приложений?
ММ: Команда использует Version Control Unity , что позволяет участникам одновременно работать над ветками и управлять собственными изменениями. Мы используем ветки main, live, dev, beta и feature. Version Control Unity помогает команде работать согласованно и упрощает отправку и получение изменений.
Для сборки и развертывания мы используем Unity Hub для создания Android Package Kit (APK) и Meta Quest Developer Hub для их развертывания за считанные минуты. После этого мы повышаем или понижаем рейтинг сборок и выпускаем их для игроков или альфа-тестеров.
Конрад Даггер: На этапе запуска, особенно по мере роста популярности UG , нам была необходима полная информация о том, что происходит в масштабе проекта. Редактор не мог смоделировать каждый сценарий, поэтому мы загрузили отладочные символы и использовали панель мониторинга Mixpanel для непрерывного отслеживания ошибок. Мы по-прежнему проверяем это ежедневно и после каждого обновления, чтобы убедиться, что проблемы не повторяются. Это помогает нам решать проблемы до того, как они повлияют на игроков.
ММ: Мы можем получить доступ к символам аварий напрямую через Meta, поэтому нам не потребовалось специальное решение. Unity позволяет нам собирать и загружать их в Meta на том же или на отдельном этапе. Для ошибок и исключений, которые не фиксируются символами сбоя, мы разработали специальные инструменты, ограничивающие скорость загрузки для каждого плеера и включающие полные трассировки стека.
Мы анализируем эти отчеты вместе с историей действий пользователей, чтобы точно определить, чем они занимались до того, как произошло событие. Mixpanel агрегирует события, позволяя командам создавать запросы, схемы и визуализации, что помогает нам быстро выявлять и устранять проблемы.

С какими основными ограничениями при развертывании, ориентированном на устройства VR , вы столкнулись?
CD: Что касается сборки, наша система довольно проста. Мы используем встроенную в Unity систему сборки и размещаем проект на целевой платформе Android . Мы создаём APK-файл, загружаем его в Meta Quest Developer Hub и распространяем через платформу Meta Quest. Иногда нам приходится пересобирать APK-файлы, и мы также сталкивались с небольшим количеством ошибок при загрузке.
ММ: В период раннего доступа игра привлекала злоумышленников, моддеров и хакеров. Распространяемые APK-файлы создавали риски безопасности, поэтому мы усилили защиту нашей VR -сборки с помощью собственных решений и дополнений из Unity Asset Store .
CD: Мы также используем пакеты обфускации для защиты файлов и серверной части. В процессе самостоятельного развертывания мы проводим проверки с помощью аттестации Meta, а PlayFab помогает подтвердить активность учетной записи и предотвратить несанкционированный доступ. Мы также обеспечиваем соблюдение минимальных версий, чтобы игроки не могли войти в систему, используя устаревшие APK-файлы.
Хала Лувьер: Аппаратное обеспечение VR быстро совершенствуется от поколения к поколению, и многие игроки до сих пор используют Meta Quest 2. При разработке каждой новой функции необходимо учитывать ее производительность. Мы регулярно оцениваем идеи с точки зрения их влияния на результаты деятельности. Такой компромисс представляет собой серьезную проблему в VR, где различия в аппаратном обеспечении могут существенно повлиять на игровой процесс.

Как обновление с Unity 2021.1 до Unity 6 повлияло на ваш рабочий процесс развертывания?
ММ: Изначально мы использовали Unity 2021.1, потому что команда стандартизировала его использование, но в этой версии были проблемы со сборкой и рабочим процессом, включая несоответствия в фокусировке и отслеживании VR .
При переходе на Unity 6 мы выбрали версию, которая оказалась более стабильной для нашего рабочего процесса. Для обновления потребовались изменения кода устаревших API, и на его завершение ушло несколько дней. Мы обновили программное обеспечение для повышения стабильности.
CD: Мы также перешли на Unity 6, потому что эта операционная система лучше работала с Fusion. В Unity 6 также поддерживался инструмент PlayMode Tool , который помогал нам тестировать многопользовательские сценарии на ранних этапах разработки. В итоге мы перестали им пользоваться после ужесточения мер безопасности. Большинство проблем с миграцией мы решили примерно за неделю.
ММ: Основная проблема заключалась в переполнении анимационного окна, но мы разработали обходное решение.
В Unity 6 не появилось новой ошибки. В Unity 6 была обнаружена существующая проблема, связанная с тем, что счетчики анимации достигают своих максимальных значений. Вместо того чтобы игнорировать это, мы разработали собственные инструменты и системы для редактора, позволяющие выявлять затронутые анимации и сбрасывать их до того, как они выйдут за пределы допустимого диапазона.

Как вы определяли и проверяли целевые показатели производительности во время развертывания на VR оборудовании?
ММ: Мы отслеживаем несколько показателей эффективности. Одним из ключевых показателей является частота кадров (fps), целевая частота для нашего устройства составляет 72 fps. Мы отслеживаем падения ниже этого порогового значения и частоту таких падений. Мы используем Unity Profiler и панель мониторинга Meta, которые предоставляют подробную информацию по каждому устройству.
Благодаря низкополигональной модели и многократно используемым шейдерам, проблемы с памятью не являются серьезной проблемой, поэтому мы редко сталкиваемся со сбоями, связанными с нехваткой памяти. Развитие сетевых технологий является одним из главных направлений, поскольку в UG представлено множество объектов и сетевых взаимодействий. Мы работали напрямую с командой Photon над устранением проблем с производительностью и сбоями, а также использовали такие методы, как выделение областей интереса, для повышения масштабируемости.
Мы также отслеживаем сбои и выясняем, были ли они вызваны новыми изменениями или проблемами с производительностью.
Как вы использовали Unity Profiler для оптимизации сборок для конкретных платформ перед развертыванием?
ММ: Инструмент Unity Profiler помогает нам отслеживать скачки задержки и контролировать падение частоты кадров. Мы можем проанализировать количество проходов рендеринга, использование памяти и активность кадров, чтобы выявить причины. Мы использовали его для расследования проблемы с DinoDex. У каждого игрока есть свой собственный DinoDex, поэтому мы использовали API поиска по сценам, чтобы найти соответствующий компонент во время выполнения.
В редакторе это работало, но при тестировании в реальных условиях вызывало сильные зависания при открытии DinoDex. Профайлер показал, что вызов API вызывал всплески активности в сценах с большим количеством объектов. Мы определили точный скрипт и функцию, а также нашли другие примеры использования того же шаблона, что позволило уменьшить скачки задержки в рамках всего проекта.
CD: Это имело решающее значение для отладки проблем с производительностью. Проблема с DinoDex могла привести к зависанию лобби на несколько секунд при его открытии.
Ещё один пример — полки для игроков, на которых рядами выставлены динозавры. Первоначальная реализация создавала множество сетевых объектов в одном кадре, что приводило к скачкам производительности.
Профайлер показал, что эти всплески были вызваны вызовами функции создания объектов Fusion и большими иерархиями объектов с компонентами NetworkObject и NetworkTransform. Это помогло нам точно определить причину и устранить проблемы, мешающие игровому процессу, включая повторяющиеся появления персонажей и сбои.

Какие решения или оптимизации в процессе развертывания оказали наибольшее влияние на обеспечение стабильной и производительной работы VR реальности?
ММ: Контроль качества — одна из наших сильных сторон. Unity позволяет создавать целевые сборки с настраиваемыми параметрами для бета-режимов и других тестовых сред. Мы можем выпускать сборки для небольших групп игроков, исправлять ошибки и выпускать обновления для альфа-версии за считанные минуты, часто менее чем за 10 минут.
Этот рабочий процесс позволяет нам быстро тестировать изменения до того, как они станут доступны игрокам на основном сервере. Способность регулярно выпускать обновления и поддерживать этот цикл обратной связи является ключом к стабильности.
CD: Оптимизация ведется непрерывно с момента начала разработки в январе 2025 года. Мы действовали быстро, выпустив продукт для тестировщиков и запустив его к сентябрю, а затем выпуская еженедельные обновления после запуска.
С самого начала мы сосредоточились на сетевых технологиях, производительности и качестве кода. Процесс обеспечения качества поддерживал этот темп, позволяя быстро тестировать новые системы. Мы также избегаем функций, которые не оправдывают компромиссы в отношении производительности или разработки.

Какой ваш главный совет начинающим разработчикам VR ?
ММ: Создайте что-нибудь, хотя бы небольшой прототип. Его не нужно полировать. Делитесь своими работами через игровые джемы, itch.io, SideQuest или магазин Meta Horizon, чтобы получить прямую обратную связь. Не принимайте критику близко к сердцу и используйте отзывы для совершенствования. Многие разработчики VR избегают обмена опытом во время обучения, но работа в изоляции замедляет развитие.
HL: Бета-тестирование имеет решающее значение. Перед релизом компания UG провела закрытое альфа- и бета-тестирование в течение четырех-шести недель, что помогло сформировать окончательный пользовательский опыт. Игроки не всегда ведут себя так, как ожидают разработчики, поэтому внешние тестировщики показывают, как игра ведётся на самом деле. Эта обратная связь помогает разработчикам сократить разрыв между задуманным и фактическим игровым опытом, и командам не следует игнорировать её, даже если игра кажется готовой.
Чтобы узнать больше о проектах, созданных с помощью Unity, посетите страницу «Ресурсы» .
