TGViewer
Unity Architect: архитектура unity проектов Unity Architect: архитектура unity проектов @uniarchitect · 5.23K subscribers
Post #36 3.07K
ВЕРСИОНИРОВАНИЕ Ч.2. МИГРАЦИЯ

Ч.1. СЕМАНТИКА

В первой части я говорил что поддерживать обратную совместимость для игр нет смысла, потому что API нет.
Исключение — профиль игрока. Его обратную совместимость мы должны обеспечивать всегда.

Страшный сон для игрока — потеря прогресса.
Страшный сон любого проекта — ошибки с локальным профилем игрока.
Если профиль не синхронизирован с сервером, а игрок потратил деньги, то можно ловить кучу 1 ⭐️ в сторах, возвращать всем деньги и смело ставить свечку за упокой проекта 🕯

Чтобы сон не стал явью нужно позаботиться о миграциях профиля игрока.
Миграция — преобразование данных формата одной версии в формат другой.

Пример:
- Профиль игрока версии 1.0.0 — { “coins”: 100 }
- Переименовали coins в soft, версия 1.1.0 — { "soft":100 }
- Объединили поля с валютами в объект, версия 1.2.0 —
{ "bank": { "soft":100, "hard":10 } }

Если не будет миграции игрок получит ошибку десериализации при запуске игры после обновления. Потому что json schema между версиями разная.

Решение:
Json файл нужно версионировать. При изменении схемы (поломке обратной совместимости), писать миграции.

Задача сводится к тому чтобы написать свой JsonConverter, который будет брать все объекты миграции с версии k до n и вызывать их методы.
Где k - версия json у пользователя, n - версия json в проекте

Типичная ошибка:
Десериализовать файл в старый формат, мигрировать, сохранять и снова десериализовать в новый формат.
Как ни странно, встречал такое решение в нескольких проектах. Это костыль, не делайте так.

У себя на проектах я использую этот плагин. Он достаточно интерпрайзный и местами решения оч странные, но он работает.

Смотрю на плагин и слышу как это интерпрайзное говно кричит о том чтобы его переписали и упростили.

Давайте 15 👍 этому посту и я за пару недель
👨‍💻 свою версию, которую вы сможете использовать в своем проекте.

Обещание выполнено!
https://github.com/vangogih/FastMigrations.Json.Net

#проект_релиз@UniArchitect
  • 👍 33
More from @uniarchitect
  1. Jul 24, 2026Post #199
  2. Jul 12, 2026AI НЕ ДЕЛАЕТ ВАС ПРОДУКТИВНЕЕ Незыблемый факт: AI уже очень хорош в маленьких задачах. Нап…
  3. Jul 9, 2026Post #196
  4. Jul 7, 2026UNITY BUILD PIPELINE ПО КИРПИЧИКАМ Полгода назад я решил попробовать активность в блоге, г…
  5. Jul 4, 2026ПРОКЛЯТИЕ ПЕРЕИСПОЛЬЗУЕМОСТИ Делюсь болью. Я последние 5 лет на разных уровнях у разработч…
  6. Jun 29, 2026AI КАК РЕДАКТОР, А НЕ АВТОР Это вторая статья из серии про AI. Первая тут. Когда я запуска…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →