Настройка crash-мониторинга для мобильных VR-игр

Вы запускаете мобильную VR-игру на Quest 3. Через неделю — поток жалоб: вылетает на Horizon OS, в логах только hex-адреса. Без crash reporting вы теряете дни на ручной поиск. Мы настроили мониторинг для десятка VR-проектов — разбираем, как исключить слепые зоны. Один такой кейс: игра с URP и динамич

Наши компетенции

Другие услуги студии

VR/AR/MR приложения на заказ

Впечатляйте клиентов и обучайте команду в виртуальной реальности

Разработка игр на Unity

От идеи до релиза — игры, которые запоминаются

3D-моделирование и анимация

Оживим ваш продукт в объёмной графике и анимации

VR-тренажёры промышленного оборудования

Тренируем операторов на технике без риска и простоя

AR-инструкции для производства

Пошаговые подсказки прямо на оборудовании — без бумаги

Safety-тренажёры

Отработка ЧС и техники безопасности без выхода на объект

VR/AR-тренинги

Обучаем персонал сервису, адаптации и soft skills в VR

Обучающие викторины

Проверка знаний в формате игры — легко и без стресса

Корпоративные видеоинструкции

Понятные ролики для обучения сотрудников и клиентов

Геймификация бизнес-процессов

Мотивируем команду через игровые механики в KPI и HR

Приложения для инфокиосков

Интерактивные экраны для магазинов, стендов и офисов

VR/AR-инсталляции

Wow-эффект для брендов на выставках, ивентах и в шоу-румах

Виртуальные выставки и музеи

Ваша экспозиция доступна из любой точки мира — 24/7

Event-квесты и брендированные игры

Запоминающиеся игры для конференций и клиентских ивентов

Часто задаваемые вопросы

Последние работы

  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    1504
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    1006
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Обучающая викторина для детей «Покупки в магазине»
    95

Вы запускаете мобильную VR-игру на Quest 3. Через неделю — поток жалоб: вылетает на Horizon OS, в логах только hex-адреса. Без crash reporting вы теряете дни на ручной поиск. Мы настроили мониторинг для десятка VR-проектов — разбираем, как исключить слепые зоны. Один такой кейс: игра с URP и динамическими тенями падала на Pico 4 из-за некорректного unload AssetBundle. Crashlytics показал hex-стек, который после symbolication указал на AssetBundle.Unload(true) в неверном потоке. Исправление заняло два часа вместо двух недель. После настройки symbolication crash-free rate вырос с 94% до 99.2% — это стандартная динамика для VR-проектов с нашей интеграцией.

Почему стандартный Unity Crash Reporter не работает для VR?

Unity Cloud Diagnostics и встроенный UnityCrashHandler покрывают C#-исключения, но 90% крэшей в VR — нативные: SIGSEGV, SIGABRT. Они приходят с hex-стеком, который без NDK symbolication не читается. Вот реальный пример: Quest 2, Unity LTS, URP — крэш на Horizon OS. Стек: #00 pc 0x00000000012abc14 /data/app/.../libunity.so. После загрузки symbol table он раскрывается в вызов Vulkan buffer allocation, который лёг из-за изменения memory limits. Для IL2CPP-сборок нужны .pdb или il2cpp_data — без них Firebase Crashlytics покажет нативный стек без маппинга на C#.

Oculus Developer Center рекомендует загружать symbols для каждой сборки. Это единственный способ получить читаемый стек для нативных крэшей.

Firebase Crashlytics или Sentry: что выбрать для VR?

Firebase Crashlytics — стандарт для мобильного VR. Интеграция через Firebase Unity SDK: добавьте google-services.json, настройте launcherTemplate.gradle. Включите android.useNewApkSplitting для корректного маппинга версий. Загрузка NDK symbols — через CLI: firebase crashlytics:symbols:upload --app=APP_ID path/to/libil2cpp.so. Важно: всегда загружайте symbols для каждой используемой версии Unity.

Sentry даёт больше гибкости: можно развернуть on-premise для конфиденциальных данных и настроить кастомные event-логи. Мы часто предлагаем комбинацию: Crashlytics для автоматического сбора, Sentry для событий под NDA. Оба инструмента поддерживают фильтрацию по версии ОС, модели и версии игры.

Инструмент Время интеграции Symbolication On-premise
Firebase Crashlytics 1–2 дня + IL2CPP, NDK
Sentry 2–3 дня + IL2CPP, NDK +

Firebase Crashlytics быстрее Sentry примерно в два раза на этапе базовой интеграции, но Sentry выигрывает в кастомизации. На одном проекте мы сэкономили 40% времени QA после настройки symbolication — crash-free rate вырос с 94% до 99.2% за две недели.

Как загрузить NDK symbols в Firebase Crashlytics?

Процесс включает загрузку .pdb для IL2CPP и .sym для нативного кода. Для Unity IL2CPP: в билде создаётся il2cpp_data — его нужно преобразовать в symbol файл через il2cpp-symbols.zip. Для нативного NDK: используйте ndk-stack или Firebase CLI. Мы автоматизируем этот шаг в CI/CD: после каждой сборки Jenkins загружает symbols, чтобы не терять версии. Гарантируем, что symbol upload не ломает пайплайн.

Как мы настраиваем мониторинг под ключ

Процесс включает пять этапов:

  1. Аналитика: изучение текущего билда, версии Unity, платформы, сценариев крэшей.
  2. Интеграция: подключение Crashlytics и/или Sentry, настройка symbol upload в CI/CD.
  3. Кастомизация: добавление breadcrumbs, custom events, soft error logging.
  4. Тестирование: симуляция крэшей, проверка стека, настройка алиасов.
  5. Документация: инструкция по разбору крэшей для команды.
Этап Длительность
Базовая интеграция Crashlytics с symbolication 1–2 рабочих дня
Полный стек (Crashlytics + Sentry + custom events) 3–5 рабочих дней
Разбор и исправление топ-5 крэшей после запуска 1–3 недели

Типичные причины крэшей в мобильных VR-играх

Основные проблемы: Out of Memory (Quest 3 оставляет приложению около 3-4 ГБ), утечки нативной памяти, некорректный unload AssetBundle, Vulkan validation errors, threading violations. Например, обращение к Unity API не из main thread — частая причина SIGABRT. После внедрения мы поддерживаем дашборд с фильтрацией по версии Horizon OS, модели устройства и версии игры. Ключевая метрика — crash-free rate: для VR норма выше 99%, если ниже 97% — срочное расследование. В одном проекте утечка AssetBundle давала 3% крэшей — после фикса показатель вернулся к 99.5%.

Что вы получаете в итоге?

  • Полная visibility крэшей: managed + native.
  • Сокращение времени поиска причины с недель до часов.
  • Возможность фильтровать по версии ОС, модели, версии игры.
  • Обучение команды работе с дашбордом.

Закажите интеграцию — мы оценим ваш проект и предложим оптимальный стек. Для начала достаточно прислать билд и список целевых устройств. Получите консультацию: наши инженеры помогут выбрать инструменты и настроить пайплайн symbol upload.