Prerequisites
- KalmForge SDK installed in your Unity project.
- API key configured in Window → KalmForge.
- Newtonsoft.Json (
HAS_NEWTONSOFT_JSONdefine) for Remote Config. A/B Tests alone do not require it.
What it is
Open from KalmForge → Remote Config Setup Wizard. A 7-step wizard that covers both Remote Config and A/B Tests and writes a typed ScriptableObject plus an optional manager script that you can drop on any GameObject.
Wizard steps
- Overview
- Settings - SDK + API key sanity check
- Newtonsoft.Json check
- Configure
- Generate
- Preview
- Finish
Newtonsoft.Json check
Looks for the HAS_NEWTONSOFT_JSON define symbol. If it's missing, the wizard routes you to the main Project Setup Wizard to install it.
Configure step
| Name | Type | Description |
|---|---|---|
| Class name | string | Default GameRemoteConfig. Becomes the ScriptableObject type. |
| Include A/B Test helpers | bool | Wires ABTests.Fetch and exposure logging into the manager. |
| Generate RemoteConfigManager MonoBehaviour | bool | Adds a ready-to-drop manager script for the scene. |
| Fields table | Section / Key / Type / Default | Editable rows (Type ∈ float | int | bool | string) with add and delete per row. |
Generated files
Snake_case keys are converted to camelCase field names. The ScriptableObject ships with [CreateAssetMenu] so you can create an asset from the Project window.
1using KalmForge;2using UnityEngine;34[CreateAssetMenu(menuName = "KalmForge/Game Remote Config")]5public class GameRemoteConfig : RemoteConfigScriptableObject6{7 [ConfigurableField("gameplay", "enemy_speed")]8 public float enemySpeed = 1.0f;910 [ConfigurableField("gameplay", "starting_lives")]11 public int startingLives = 3;1213 [ConfigurableField("ui", "show_tutorial")]14 public bool showTutorial = true;15}1using KalmForge;2using UnityEngine;34public class RemoteConfigManager : MonoBehaviour5{6 public GameRemoteConfig config;78 void Awake()9 {10 RemoteConfig.OnConfigLoaded += HandleConfig;11 ABTests.OnAssignmentsLoaded += HandleAssignments;12 }1314 void HandleConfig() { /* config fields are now overwritten with live values */ }1516 void HandleAssignments()17 {18 // Example A/B branching:19 // if (ABTests.IsInVariant("checkout_v2", "treatment")) { ... }20 }21}Live preview
In Play Mode the Preview step calls RemoteConfig.Fetch() and ABTests.Fetch(logExposure: false) and displays each configured key's resolved value - including any A/B overrides.
How it works at runtime
Any field tagged [ConfigurableField(section, key)] on a RemoteConfigScriptableObject is overwritten when RemoteConfig.Init() runs. A/B test rc_overrides are then applied on top automatically. In the editor, OnDisable resets fields to their authored values so your design-time defaults are never lost.
Next steps
- Create the ScriptableObject asset via its
CreateAssetMenuentry and assign it toRemoteConfigManager.config. - Call
KalmForgeClient.Init()on game start. - See the Remote Config runtime API and A/B Tests runtime API.