Course contentsShow
← Unity Game Development
Lesson 824 of 82812. Multiplayer and DeploymentFree lesson

Managing Live Game Configurations and Remote Settings

Learners will utilize Remote Config to adjust game parameters and balance variables in real-time without requiring a full client update.

In this lesson, you will learn how to decouple game balance variables from your hard-coded source files by utilizing Unity Remote Config to inject values at runtime.

Why Decouple Variables?

In high-stakes multiplayer environments, waiting days for a platform storefront review to update a minor balance tweak—like reducing a projectile's damage or adjusting an XP multiplier—is unacceptable. Remote Config allows you to define "Key-Value" pairs in the Unity Gaming Services dashboard that your game client fetches upon initialization. This lets you tune your game's "feel" and difficulty for thousands of players instantly without forcing a client-side update.

Implementing Remote Settings

The core workflow involves defining a set of parameters in the Remote Config dashboard, then requesting these values in your NetworkManager or a dedicated GameSettings script during the authentication handshake.

When the client fetches the configuration, the data is returned as a JSON-like structure. You can map these directly to your variables:

using Unity.RemoteConfig;

public struct UserAttributes { }
public struct AppAttributes { }

public class GameBalanceManager : MonoBehaviour
{
    public float projectileDamage = 20f; // Default value

    void Start()
    {
        // Fetch values from Unity Cloud
        ConfigManager.FetchConfigs(new UserAttributes(), new AppAttributes());
        
        // Subscribe to the fetch completed event
        ConfigManager.FetchCompleted += ApplyRemoteSettings;
    }

    void ApplyRemoteSettings(ConfigResponse response)
    {
        if (response.status == ConfigRequestStatus.Success)
        {
            projectileDamage = ConfigManager.appConfig.GetFloat("projectile_damage");
            Debug.Log($"Balance updated! New damage: {projectileDamage}");
        }
    }
}

Strategic Considerations

Because these values affect multiplayer gameplay, ensure your game logic treats these remote values as "authoritative." If a player's client receives a modified movement_speed value, verify that your server-side reconciliation logic handles this update gracefully to avoid state synchronization issues. Always provide safe, hard-coded default values in your script to ensure the game remains playable even if the device is offline or the configuration service is unreachable.

Key Takeaway: By moving balance variables to Remote Config, you transform your game into a living service capable of real-time adjustment, allowing you to react to player feedback without the friction of a deployment cycle.