Удаленная настройка баланса через конфигурационные файлы игр
Хардкодить игровой баланс в C#-классы — это путь к пересборке и переотправке апдейта каждый раз, когда нужно поправить урон от оружия или скорость спавна врагов. Для VR-игр, где ревью в Meta Horizon Store занимает 5–14 дней, это неприемлемо. Система удалённой конфигурации позволяет менять баланс без нового билда — через JSON-файлы или Remote Config сервис.
Как это устроено технически
Базовый уровень: ScriptableObject-ассеты в Unity. Все игровые параметры — hp врагов, урон оружия, время перезарядки, скорость движения в VR — хранятся в SO-файлах, а не в MonoBehaviour-полях. Это даёт возможность выносить данные в JSON и загружать их runtime.
Следующий уровень — Firebase Remote Config. Параметры хранятся в Firebase Console, приложение при старте делает remoteConfig.FetchAsync() с заданным minimumFetchInterval. Полученные значения кэшируются локально через remoteConfig.ActivateAsync() и применяются при следующем старте или немедленно, если логика это допускает.
Для VR специфика: нельзя применять баланс-параметры прямо в середине сессии без учёта текущего состояния игрока. Если игрок держит оружие в руках, и в этот момент прилетел новый конфиг с изменённым damage — нужна логика отложенного применения: следующая сессия, следующий уровень, следующий spawn enemy.
Unity Remote Config (собственный сервис Unity Gaming Services) — альтернатива с более нативной интеграцией. Конфиг структурирован через ConfigResponse с Environment-ами (development/staging/production). Позволяет делать A/B-тестирование баланса: 50% игроков получают конфиг A, 50% — конфиг B, аналитика показывает, какая группа дольше играет и с меньшим числом смертей.
Структура конфигурационных файлов
Для проектов без Firebase/UGS — самописный RemoteConfig через HTTPS endpoint. Сервер отдаёт JSON, клиент парсит через JsonUtility или Newtonsoft JSON. Важно версионировать конфиги: {"version": 3, "params": {...}}. При несовместимости версий клиент падает на дефолтные значения, а не крашится.
Пример структуры конфига для VR-шутера:
{
"version": 5,
"weapons": {
"pistol": {"damage": 25, "fire_rate": 0.4, "magazine_size": 12},
"shotgun": {"damage": 60, "fire_rate": 1.2, "pellets": 8}
},
"enemies": {
"grunt": {"hp": 100, "speed": 2.5, "spawn_interval": 8.0},
"elite": {"hp": 350, "speed": 3.0, "spawn_interval": 25.0}
},
"session_params": {
"max_wave": 15,
"score_multiplier": 1.0
}
}
Отдельная тема — баланс под VR-специфику: параметры комфорта (скорость телепортации, поворот snapturn в градусах, радиус зоны взаимодействия с объектами) тоже могут быть вынесены в Remote Config. Это позволяет реагировать на обратную связь от пользователей без ревью.
Безопасность и валидация
Remote Config — потенциальный вектор для неправильных данных. Клиент должен валидировать полученные значения перед применением: диапазоны (damage не может быть отрицательным или больше MAX_DAMAGE), типы данных, обязательные поля. Если валидация не прошла — откат на hardcoded defaults или предыдущий кэшированный конфиг.
Firebase Remote Config поддерживает условия: разный конфиг для разных версий приложения, разных платформ, разных сегментов пользователей. Для VR полезно: Quest 2 может получать более лёгкий баланс с меньшим числом одновременных врагов, чем PC VR версия.
| Тип задачи | Ориентировочные сроки |
|---|---|
| Перевод существующих параметров в SO + JSON-загрузка | 2–4 рабочих дня |
| Интеграция Firebase/Unity Remote Config с A/B тестированием | 5–8 рабочих дней |
| Разработка кастомного конфиг-сервера + клиента | 2–4 недели |
Стоимость определяется после анализа объёма параметров и требований к инфраструктуре.





