关于 game-balance
game-balance 是一项游戏平衡技能,围绕可测目标、明确假设和证据组织平衡工作。它指导设计者进行建模、确定性检查、模拟、试玩、遥测和受控调优,且不依赖特定游戏引擎。
主要功能
- 01可测试的平衡契约
- 02属性与电子表格建模
- 03曲线、经济与概率分析
- 04确定性检查与模拟
- 05试玩和遥测指导
- 06受控调优与回滚
适用场景
- 01建模武器或角色取舍
- 02调查成长与经济问题
- 03规划随机奖励系统测试
- 04用遥测诊断平衡改动
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pbzona/ godot-skills --skill game-balance安装后在 Claude Code 中输入/game-balance确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/economies-and-probability.mdquantitative-modeling.mdsimulation-telemetry-and-tuning.md详细介绍
游戏平衡
平衡是指针对特定玩家、情境和时间范围,调整数值与规则以实现预期体验。这并不意味着让每个选项都完全相同。
保持引擎无关。将可调输入、公式、假设、场景和检查项放入可供检查的资料中。只有在模型和证据明确后,才编写实现指导。
核心原则
- 从可衡量的设计目标出发,而不是从偏好的数值出发。
- 对每项平衡结论,说明适用的玩家群体、技能水平、情境和时间范围。
- 保留有意义的差异。各选项的预期价值可以相同,但在风险、时机、信息、操作负担或情境适配性上仍可不同。
- 只有当玩家可以选择、理解该选项,并认为它确实可行时,才能将玩家选择视为证据。
- 将原始输入、派生指标、面向玩家的显示值和观测结果分开。
- 集中管理共享参数。不要在多个公式中重复填写同一个平衡常数。
- 用基准支点比较大量对象,再交叉测试不常见的交互。
- 根据期望的边际变化选择曲线形状,而不是凭习惯决定。
- 将经济系统作为跨时间的流量和存量来分析,而不是只看价格表。
- 根据分布和尾部风险分析随机结果,不要只看预期值。
- 优先进行确定性检查;针对相互作用或随机行为使用模拟;通过游戏测试评估体验;通过遥测分析大规模行为。
- 一次只调整一个因果杠杆或一组连贯的杠杆,并保留回滚方案。
前期调研
更改数值之前,先检查现有规则、电子表格、数据导出、代码/配置、测试结果、模拟和遥测定义。明确以下内容:
- 平衡问题和观测到的症状。
- 预期的玩家体验和成功的定义。
- 玩家细分群体、技能水平、模式、地图、遭遇战和进度阶段。
- 相关时间范围:操作、遭遇战、对局、天、赛季或整个生命周期。
- 候选选项及其可用时机。
- 属性、公式、依赖关系、单位、范围、舍入规则和上限。
- 当前事实来源和数据管道。
- 可用证据及其样本/情境局限。
- 生产、公平性、无障碍、商业和法律限制。
如果信息缺失,应标注假设,并设计尽可能小的测量或实验来替代这些假设。
工作流
1. 编写平衡约定
使用可测试的陈述:
For [player segment] in [context] over [horizon],
[primary metric] should remain within [target range],
while [guardrail metrics] remain within [ranges].
We will change [decision] if [evidence threshold] is crossed.
有效目标维度示例包括解决问题所需时间、不同技能水平玩家的成功率、不同情境下的选择多样性、恢复机会、进度所需时间、资源盈余、奖励空窗期和感知清晰度。
不要默认将选择率设为相同或胜率设为 50%。说明目标为何符合游戏的设计目的。
2. 定义比较情境
列出数值可比的条件:
- 玩家技能和知识水平。
- 对手或挑战的类型。
- 地图、距离、队伍规模和模式。
- 起始资源和持续生效的能力。
- 输入方式、延迟和操作假设。
- 持续时间和停止条件。
将不兼容情境合并为全局平均值,并不能得出平衡结论。应先细分,再汇总。
3. 建立属性模型
对于每个对象和属性,定义其含义、单位、有效范围、来源、可见性、可变性,以及会使用该属性的机制。将属性标记为:
- 输入:直接调整的数值。
- 派生:根据输入计算得出。
- 情境:由场景提供。
- 结果:通过游戏或模拟测得。
- 显示:为玩家舍入或转换后的数值。
使用 定量建模 编写平衡简报、工作簿布局、属性工作表、归一化、支点、公式、曲线和原始示例。
4. 组织电子表格或模型
至少应分为以下部分:
- 阅读说明、假设、单位和变更历史。
- 参数和命名常量。
- 实体输入。
- 曲线和查找表。
- 派生计算。
- 代表性场景。
- 不变量和错误检查。
- 结果、分布和图表。
- 原始模拟或游戏测试导入数据。
每个可比较对象占一行,每个属性占一列。验证输入类型和取值范围。调试时让中间计算保持可见;只有验证完成后才将其隐藏或分组。
5. 确定范围和基准点
将不同单位归一化,以便比较:
normalized = clamp((value - minimum) / (maximum - minimum), 0, 1)
value = minimum + normalized * (maximum - minimum)
选择一个具有代表性且刻意保持普通的对象或场景作为基准点。在此基础上扩展出一系列对象前,先在常见情境中验证它。
使用结果指标而非属性原始总和,将每个变体与基准点进行比较。加权得分相同只是一个假设,并非证据。交叉测试极端情况、克制关系、组合,以及规则与基准点不同的选项。
6. 根据边际效应选择曲线
同时检查总值和每一步的变化量。
- 线性:绝对增量恒定。
- 指数:比例增量恒定;适用于复利增长或快速上涨的成本。
- 幂函数曲线:可调整加速或减速程度。
- 饱和或对数曲线:前期收益较大,之后收益递减。
- 分段曲线:不同阶段有明确的转折点。
检查第一个、中间、最后一个值,以及超过上限的值。绘制曲线、逐步差值,以及赚取所需时间或击败所需时间。内部精度应与显示时的舍入分开处理。
7. 建模相互交织的属性
先将相互依赖的属性化简为结果指标,再进行比较。常见示例:
throughput = amount_per_action * actions_per_second * success_probability * uptime
time_to_goal = required_amount / net_gain_rate
expected_damage = hit_probability * damage_on_hit
effective_durability = health / (1 - damage_reduction)
明确说明有关装填、停机时间、过量伤害、目标抗性、移动、资源上限和玩家操作水平的假设。单一综合得分适合初步筛选,但可能掩盖爆发、方差、射程、控制和团队效用。
8. 建模经济系统和随机性
使用 经济系统与概率 描绘来源、消耗、库存、转换、可负担性、加权结果、期望值、方差、资源短缺期和相关事件。
对于经济系统,按相关的玩家时间单位和进度群体计算净流量。检查通货膨胀、停滞、囤积、强制维护成本和财富集中。
对于随机系统,计算结果概率、预期收益、离散程度、百分位数、连续失败概率和依赖关系。将保底或递增概率建模为有状态系统,而非独立抽取。
9. 检查确定性极端情况
在模拟或人工测试前,验证:
- 最小值、最大值、零、上限值和超出上限一步的值。
- 空库存和满库存。
- 合法的最快速率和最慢速率。
- 同时发生的事件及平局判定。
- 舍入边界。
- 不可能或无效输入的处理方式。
- 最佳组合、最差组合和自我维持循环。
- 从零开始以及从亏空中恢复的行为。
在隔离的副本中有意测试荒谬的数值。极端测试能迅速揭示隐藏的依赖关系以及引擎或规则的限制。
10. 模拟相互影响的结果
如果状态、策略、依赖关系或反复出现的随机性让解析公式变得难以处理,就使用模拟。请参阅 模拟、遥测与调优。
明确说明 Agent 策略和技能假设。使用多个确定性随机种子运行,报告分布和置信度,并通过解析方法验证简单情况。模拟 Agent 的首选选项只能证明该策略下何者最优。
使用敏感性扫描找出对结果影响最大的输入,以及会导致结论反转的交互因素。
11. 对决策进行游玩测试
测试玩家能否感知并利用其中的权衡,而不只是检查模型输出是否接近。
观察:
- 选择耗时和比较行为。
- 根据可用性和情境细分的选择占比。
- 条件变化时的策略切换。
- 有连贯理由支撑的意见分歧。
- 从未考虑过的选项,或用过一次后便放弃的选项。
- 预测准确度和感知公平性。
- 结果不佳后的恢复行为。
让新玩家测试易懂性,让有经验的玩家测试深度和优化空间。区分困惑与经过思考后的犹豫。
12. 扩大规模前做好遥测采集准备
为每项指标定义其所要支持的决策、事件、属性、分母、群组和保留期限。纳入构建版本和平衡数据版本,以便将结果归因于正确的规则。
记录机会和行动。若选项没有提供或玩家买不起,选择率就毫无意义。记录经济交易或遭遇前后的相关状态。
只收集必要的数据,采取适当的同意和隐私保护措施,不要根据单个汇总指标推断玩家意图。
13. 将调整作为实验
每轮调整时:
- 说明诊断出的原因。
- 选择能影响该问题且影响最小的调节手段。
- 预测主要指标和护栏指标的变化。
- 只修改一个调节手段,或一个不可拆分的组合。
- 重新计算模型并检查不变量。
- 重新运行确定性案例和固定种子的模拟。
- 酌情进行游玩测试或向受控群组发布。
- 与先前版本及不同细分群组进行比较。
- 决定保留、修订、回滚还是收集更多证据。
- 记录决策并更新事实来源。
诊断信号
- 主导选项: 在削弱其表面数值之前,先检查经过情境调整的结果、信息优势、执行成本、可用性和协同效应。
- 无人使用的选项: 确认其是否容易发现且符合使用条件,再比较其情境收益和认知成本。
- 滚雪球效应: 衡量当前优势如何改变未来的收益、压制能力、信息或行动能力。可增加边际递减、暴露风险、维护成本、其他价值路径或恢复机会。
- 失败螺旋: 找出损失使玩家失去行动所需资源的临界点。保留最低资源保障,或提供代价高昂但切实可行的恢复路径。
- 无意义重复: 绘制达成目标所需时间和各时间段内有意义的决策数量。减少重复,调整收益/成本曲线,或增加在策略上各不相同的路径。
- 通货膨胀: 按玩家群组比较资源来源与消耗速率、持有量百分位数、价格变化和购买相关性。
- 停滞: 检查资源稀缺或害怕损失是否让储蓄始终比消费更可取。
- 随机性带来的挫败感: 检查失败连胜和奖励断档的百分位数,而不只是公布的概率或平均收益。
- 模型与实际游玩不符: 审查遗漏的约束、玩家操作、反馈、情境构成和实现时的舍入处理。
- 汇总结果矛盾: 按技巧水平、进度、地图、模式、队伍、构建版本和接触情况进行细分。
- 遥测数据突变: 在归因于设计之前,检查架构、平衡版本、用户群构成、事件机会和埋点。
失败模式
- 在没有可衡量契约的情况下进行调优。
- 将平衡等同于一致或受欢迎程度相同。
- 添加不会影响决策或结果的原始属性。
- 未经归一化或缺少上下文就比较不同单位。
- 将加权分数当作表现相同的证明。
- 只凭外观选择曲线,却忽略边际变化和时间成本。
- 在工作簿中反复硬编码相同的常量。
- 使用会掩盖尾部、异常值或混合群体的平均值。
- 将相互依赖或必定发生的随机事件视为独立事件。
- 模拟不现实的策略,却将结果称为玩家行为。
- 同时更改多个无关数值,导致无法归因。
- 用全局乘数修正局部症状。
- 收集遥测数据,却没有明确决策、分母或版本。
- 盲信统计精确、却衡量了错误行为的数据。
- 上线违反游戏公平承诺的隐藏自适应难度。
- 过早舍入,导致模型与实现之间出现累积偏差。
必需交付项
除非用户要求更精简的交付物,否则请提供:
- 平衡契约、玩家细分、情境、时间范围和护栏。
- 属性/数据字典,注明单位、范围、归属方和公式。
- 可检查的模型或电子表格布局,并集中管理参数。
- 支点和有代表性的场景集。
- 适用情况下的曲线、经济系统和概率分析。
- 确定性边界检查和不变量结果。
- 模拟或游玩测试计划,列出假设和输出。
- 从遥测问题到事件的规划。
- 按优先级排列的诊断,附因果证据和不确定性。
- 调优提案、预期变化、回滚条件和变更日志条目。
验证
- 目标可衡量,并明确限定玩家群体、情境和时间。
- 输入、派生值、显示值和观测值彼此区分。
- 单位兼容,公式有明确标注,舍入顺序清晰。
- 共享常量只有一个权威存放位置。
- 归一化在最小值、中间值和最大值处均可往返还原。
- 支点在普通场景中有效;极端情况和独特规则经过交叉测试。
- 曲线满足端点、单调性或预期反转、上限及边际变化目标。
- 经济系统的存量与来源、去向、转移和初始余额相符。
- 概率权重归一化;预期值和尾部风险均经过检查。
- 随机测试前先通过确定性边界用例。
- 模拟可复现,策略有文档记录,结果收敛到足以支持决策的程度。
- 遥测记录机会、情境、版本、操作和结果,不收集不必要的数据。
- 将模型预测与游玩测试或线上证据进行比较。
- 每次变更后检查护栏和回归问题。
- 及时更新事实来源、决策记录和回滚值。