Вдалена настройка баланса через конфігураційні файли ігор
Хардкодити ігровий баланс у 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—потрібна логіка відкладеного застосування: наступна сесія, наступний рівень, наступний спавн enemy.
Unity Remote Config (власний сервіс Unity Gaming Services)—альтернатива з більш native інтеграцією. Конфіг структурований через 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-специфіку: параметри комфорту (швидкість телепортації, snap turn в градусах, радіус зони взаємодії з об'єктами) також можуть бути у 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 тижні |
Вартість визначається після аналізу обсягу параметрів та вимог до інфраструктури.





