Remote Balance Configuration for Games
Hardcoding game balance into C# classes means recompile and redeploy updates whenever you need to adjust weapon damage or enemy spawn rate. For VR games, where review in Meta Horizon Store takes 5–14 days, this is unacceptable. Remote configuration system lets you change balance without new build—via JSON files or Remote Config service.
How it works technically
Basic level: ScriptableObject assets in Unity. All game parameters—enemy hp, weapon damage, reload time, movement speed in VR—stored in SO files, not MonoBehaviour fields. This allows exporting data to JSON and loading runtime.
Next level—Firebase Remote Config. Parameters are stored in Firebase Console, application on startup does remoteConfig.FetchAsync() with specified minimumFetchInterval. Retrieved values are cached locally via remoteConfig.ActivateAsync() and applied on next startup or immediately if logic allows.
VR specifics: can't apply balance parameters directly mid-session without considering player state. If player holds weapon and new config arrives with changed damage—need deferred application logic: next session, next level, next enemy spawn.
Unity Remote Config (native Unity Gaming Services)—alternative with more native integration. Config structured via ConfigResponse with Environments (development/staging/production). Enables A/B testing balance: 50% of players get config A, 50% get config B, analytics show which group plays longer with fewer deaths.
Configuration file structure
For projects without Firebase/UGS—custom RemoteConfig via HTTPS endpoint. Server returns JSON, client parses via JsonUtility or Newtonsoft JSON. Important to version configs: {"version": 3, "params": {...}}. On version incompatibility, client falls back to defaults rather than crashing.
Example config structure for VR shooter:
{
"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
}
}
Separate topic—VR-specific balance: comfort parameters (teleport speed, snap turn in degrees, interaction zone radius) can also be in Remote Config. This enables responding to user feedback without review.
Security and validation
Remote Config is a potential vector for incorrect data. Client must validate received values before applying: ranges (damage can't be negative or exceed MAX_DAMAGE), data types, required fields. If validation fails—fallback to hardcoded defaults or previous cached config.
Firebase Remote Config supports conditions: different config for different app versions, platforms, user segments. For VR useful: Quest 2 can get easier balance with fewer simultaneous enemies than PC VR version.
| Task type | Estimated timeline |
|---|---|
| Convert existing parameters to SO + JSON loading | 2–4 business days |
| Firebase/Unity Remote Config integration with A/B testing | 5–8 business days |
| Develop custom config server + client | 2–4 weeks |
Cost is determined after analyzing parameter volume and infrastructure requirements.





