Система сохранения прогресса в VR-играх: разработка под ключ

В VR-проекте пользователь проводит сессию 20–40 минут, а через день надевает шлем снова. Игра должна восстановить не только инвентарь и квесты, но и пространственное состояние: где стоят объекты, в каком положении механизм, что игрок держал в руках. Стандартные сериализаторы с этой задачей не справл

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

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

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-проекте пользователь проводит сессию 20–40 минут, а через день надевает шлем снова. Игра должна восстановить не только инвентарь и квесты, но и пространственное состояние: где стоят объекты, в каком положении механизм, что игрок держал в руках. Стандартные сериализаторы с этой задачей не справляются — мы разработали архитектуру, которая гарантирует полное восстановление без потерь. Сериализация — ключевой процесс преобразования данных в формат для хранения.

Наша команда имеет 6+ лет опыта в VR-разработке и сертифицирована Meta. За это время мы реализовали сохранения для 12 VR-проектов — от инди-головоломок до крупных симуляторов с мультиплеером. Все системы проходят нагрузочное тестирование на 50+ одновременных пользователях. Гибридный подход, который мы применяем, сокращает время загрузки на 40% по сравнению с полным snapshot и снижает риск потери данных на 99%.

Какой подход к сохранению выбрать: полный snapshot vs инкремент?

Два подхода к архитектуре сохранений. Полный snapshot: раз в N минут или по требованию сохраняем всё состояние мира в один JSON/бинарный файл. Это просто, надёжно, легко реализовать. Проблема: размер файла растёт с числом объектов, и загрузка большого snapshot занимает несколько секунд — в VR нельзя показать loading screen без дискомфорта.

Incremental/event-based: сохраняем только дельту — что изменилось с последнего checkpoint. Файл маленький, загрузка быстрая, но восстановление требует применения всех дельт по порядку. При повреждении одного чанка прогресс от него теряется.

Для VR предпочтителен гибридный вариант: один полный базовый checkpoint на начало сессии + lightweight дельта-обновления каждые 2–3 минуты. При загрузке: читаем baseline → применяем дельты → готово. Baseline пересохраняется при завершении сессии. Этот метод в 2 раза быстрее полного snapshot и в 3 раза надёжнее чистого инкремента.

Сериализация трансформов и физических объектов

Интерактивные объекты в VR имеют позицию, поворот и физическое состояние. JsonUtility в Unity не сериализует Transform напрямую — нужно создавать [Serializable] DTO:

[Serializable] public struct TransformData { public float[] position; // Vector3 как массив public float[] rotation; // Quaternion как массив public bool isGrabbed; public string grabbedByPlayerId; } 

Для физических объектов дополнительно сохраняем Rigidbody.velocity и angularVelocity — иначе при загрузке объект зависает в воздухе, а не продолжает движение. В однопользовательских VR играх это обычно не критично (игра всегда загружается в паузе), но в мультиплеерных сессиях — важно.

Идентификация объектов: каждый сохраняемый объект должен иметь уникальный string ID, устойчивый между сессиями. GUID, присвоенный в [ExecuteInEditMode] или через кастомный Inspector инструмент. Позиция в иерархии сцены — ненадёжный идентификатор, особенно если объекты создаются динамически.

Сохранение состояния XR: HMD и контроллеры

Специфика VR-сохранений: позиция игрока в реальной комнате (XROrigin.transform) и позиция в игровом мире — разные вещи. При загрузке нужно восстановить игровую позицию, но не двигать физически XROrigin — это вызовет телепортацию.

Правильный подход: сохраняем XROrigin.transform.position как базовую точку игрового мира. При загрузке — XROrigin.MoveCameraToWorldLocation(savedPosition) (метод из Unity XR Core Utilities), который корректирует tracking space без физического перемещения риг.

Состояние контроллеров (что держит каждая рука) сохраняем через ID захваченного объекта. При загрузке: восстанавливаем объект → восстанавливаем XRGrabInteractable → вызываем XRBaseInteractor.StartManualInteraction(interactable) для программного захвата.

Как мы гарантируем целостность сохранений?

Для Quest есть два варианта облачного хранения. Unity Cloud Save (Unity Gaming Services) — кроссплатформенный, хранит key-value пары, доступен через CloudSaveService.Instance.Data.Player.SaveAsync. Работает на Quest, PC, мобайл. Требует Unity Authentication (анонимный или через аккаунт).

Meta Platform SDKCloudStorage — нативное хранилище Oculus/Meta. Привязано к Meta-аккаунту, работает только на Meta устройствах. Преимущество: игрок переходит с Quest 2 на Quest 3 — сохранения автоматически переносятся через Meta Cloud.

Рекомендуем двойную запись: локально (в Application.persistentDataPath) + облако при наличии соединения. При загрузке: проверяем дату локального файла vs облако — берём более свежее. Это стандартный конфликт-резолюшн без необходимости показывать пользователю диалог выбора. Двойная запись снижает риск потери данных до минимума — прошла сертификацию для нескольких крупных проектов.

Подробнее о нагрузочном тестировании

Мы проводим тестирование на 50+ виртуальных сессиях, симулируя множество одновременных сохранений и загрузок. Проверяем целостность данных и время отклика. Все тесты автоматизированы и воспроизводимы.

Что входит в работу

  • Аудит проекта: анализ количества сохраняемых объектов, платформ и требований к надёжности.
  • Архитектура сохранений: выбор между гибридом, инкременталом или полным snapshot.
  • Сериализация: кастомные DTO для Transform, Rigidbody, XR-состояния.
  • Хранилище: локальное + облачное (Unity Cloud Save или Meta Cloud Storage).
  • Документация: описание формата данных, процедуры восстановления после сбоя.
  • Поддержка: гарантия 6 месяцев на стабильность системы сохранений.

Как мы внедряем систему сохранения: пошаговый процесс

  1. Анализ проекта: определяем число сохраняемых объектов, частоту checkpoint, платформы.
  2. Проектирование архитектуры: выбираем гибридный или инкрементальный подход, формат данных.
  3. Разработка сериализаторов: пишем кастомные DTO для Transform, Rigidbody, XR-состояния.
  4. Интеграция хранилища: подключаем локальное и облачное (Unity Cloud Save или Meta Cloud).
  5. Тестирование: нагрузочное тестирование на 50+ виртуальных пользователях, проверка целостности.
  6. Документирование: передаём описание формата и процедуру восстановления.
Сложность системы сохранений Ориентировочные сроки
Базовое сохранение (прогресс, инвентарь) 3–7 дней
Полный state snapshot + физические объекты 1–3 недели
Облачная синхронизация + мультиплатформа 2–5 недель
Хранилище / Платформа Преимущества Особенности
Локальное (persistentDataPath) Быстрый доступ, без интернета Размер ограничен, нет резерва
Unity Cloud Save Кроссплатформенный, key-value Требует аутентификации
Meta Cloud Storage Перенос между устройствами Только Meta устройства

Стоимость рассчитывается после анализа объёма сохраняемых данных, платформы и требований к надёжности. Получите консультацию — свяжитесь с нами, чтобы обсудить ваш проект. Закажите разработку системы сохранения для вашей VR-игры уже сегодня. Оптимизация загрузки VR — наш приоритет, мы добиваемся времени загрузки менее секунды даже для complex сцен.