Game Parameter and Item Balancing
Balancing is not "reduce warrior damage by 10% because they seem too strong." It's systematic data work: build a DPS matrix across classes, calculate TTK (time to kill) for each attacker/defender pair, find outliers and explain their cause.
Metrics to Calculate Before Changing Numbers
DPS (damage per second) is the basic attack metric. Calculated with attack speed, crit chance, and crit multiplier: DPS = baseDamage * attacksPerSecond * (1 + critChance * (critMultiplier - 1)). If a mage has DPS = 450 and a warrior DPS = 280, but the warrior has 3x HP—their EHP/DPS ratio needs viewing as a pair.
EHP (effective hit points) is HP with armor and evasion: EHP = HP / (1 - damageReduction). At damageReduction = 0.4 and HP = 1000 we get EHP = 1667. This is honest comparison of different archetype survivability.
TTK is for PvP and encounter design. TTK = EHP_target / DPS_attacker. If TTK for all class pairs falls in the 8–15 second range, fights are interesting. TTK < 3 seconds means one class simply destroys another before its first counteraction.
These three metrics are built into a table for all classes, levels, and key gear sets—updated on any base parameter change.
Item Balancing: From ScriptableObject to Matrix
Each item in Unity is described by ItemDefinition ScriptableObject with stat fields. Balancing work happens not in Unity editor—too inconvenient comparing 200 items. Data is exported to CSV, opened in Excel/Google Sheets, where summary tables and charts are built.
Budget system is the standard item balancing approach. Each item has "budget" stat points, proportional to rarity and level. Common item level 20 has budget 100, Rare—150, Legendary—220. Stats within item spend this budget per table "cost per characteristic unit": 1 damage = 2 budget, 1 HP = 1 budget, 1% crit chance = 3 budget.
This allows quick item check: if Legendary sword level 20 exceeds 220 budget—it's broken. If well below—it's useless. After tuning coefficients, new items are added without individual check—they automatically fit balance.
Generated Items and Ranges
In games with procedural item generation, balance is set not via fixed values but ranges: damage: [min, max] for each level. Spread shouldn't be too wide—item with damage: 10–90 at average 50 gives player too much "lottery" feeling and blurs progression. Spread of ±20–30% from average—working range for most RPGs.
Affixes on random items are also drawn from a pool with weights. AffixPool ScriptableObject holds List<AffixDefinition> with weight each—rarer affix, smaller weight. WeightedRandom sampling on generation. Important: weight sum doesn't need equal 100—algorithm calculates probability as weight / totalWeight.
PvE Encounter Balance
Encounter design is also math. For each encounter, encounter budget is calculated: sum of "costs" of enemies placed by designer. Enemy cost = their HP * (1 + damageModifier) by simplified formula, scaled to DPS of player group for that level.
If 4-player group level 15 DPS totals ~800/sec, and encounter from three enemies has total EHP 12000—that's 15 seconds of combat at zero casualties. Add mechanic with cast interruption or area attack—and group TTK becomes longer. This is designed in table before placing enemies on level.
Tools and Process
Balancing work is always iterative. Standard cycle: fix table → export CSV → auto-import to ScriptableObject via Editor script → playtest → collect data → fix table. Manual digit transfer is excluded from day one.
For online games, hot balance update capability without rebuild is critical. Balance data then lives on server in JSON/CSV and loads at session start. Unity client reads via Remote Config (Unity Gaming Services) or own endpoint.
Timeline Guidelines
| Task | Timeframe |
|---|---|
| Balance one class/item type | 2–4 days |
| Full balance 3–5 classes + gear sets | 2–3 weeks |
| Balancing + import tools + analytics | 4–6 weeks |
Five Things to Check Before Final Balance
- No TTK pairs with TTK < 3 sec (instant kill situations)
- Full level range covered with correct budget-value items
- No stat with zero or negative "utility" (players always ignore)
- Edge cases tested: max crit stack, max attack speed, zero damage from armor
- Each class has at least one dominant role in encounters, so none is "strictly worse"





