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






