
作者:王鑫然
一、前言
数值对游戏整体体验的调整,需要多方面的配合才能达到预期。先有需求,才会有数值。
数值不是单独存在的东西,它必须有法可依。

猩红收割者是不耗蓝的中路法师
数值的设定需要机制的配合。

奇迹不一定会出现
并不是所有的数值设定都能见成效。

玩家在《艾尔登法环》中死亡,魂会全部掉落
数值设定可以应用在游戏研发中的各个方面。

各种档位充值
虽然游戏行业有专门的数值策划,但这并不意味着其他策划可以不了解数值。数值也是设计的一部分,了解数值设计可以让策划对设计的思考更加精确,并且提高全盘思考和设计能力。游戏行业里经常能出一些缝合怪式的游戏,原因之一就是策划在设计时各做各的,每个模块单独看做的都挺好,只是合在一起之后,就变得十分割裂。
重点在思维。

Excel是数值策划必备工具
数值策划本身是一个极其枯燥的工作。
对于战斗策划,大型游戏战斗策划本身的工作量远大于数值策划,所以一般是不负责数值的,甚至战斗策划在做设计时,应该屏蔽自己的数学思维,从好玩的角度开始进行设计。但是战斗策划应该知道本项目的数值策划能做什么,假如战斗策划设计100个技能,数值策划只能处理其中20个技能的平衡,那么不算技术研发能力,这个项目最终就只能做出20个技能,如果项目开始没有数值策划,做一半插个数值策划进来,就会经常遇到这种情况。如果因为技术原因又去掉10个,那么最终只能做出10个技能。其实有大公司是战斗策划也负责做数值的,但按照1+1>3的原则:

对于小公司,数值都没有,这公司真的不用呆了
全文大约有16000多字,涉及大量公式及运算,尤其是战斗平衡计算部分,要看懂本文,需要具备一定数学基础。
二、基础概念和机制
2.1 回合
指对战双方中的一方进行一次攻击结算的最小时间单位,可以是回合制游戏中的1回合,也可以是即时战斗中的1秒。
战斗总回合数是指双方互砍,同时死亡所需的总回合数,也可指一方把另一方打死所需的回合数。通常用来衡量职业是否平衡的标准,假设AB两个职业互掐,A把B打倒要20回合,B把A打倒只需要10回合,说明在对战过程中,B肯定能把A打赢,这种情况下,AB两职业就是不平衡的。
2.2 数学期望
用来描述一组波动数据的真实情况。期望值=“各个数据出现的概率×数据本身”再加和。

数学期望
比如一个游戏一天有100人上线,其中10人全天上线时长20分钟,40人全天上线时长50分钟,40人全天上线时长80分钟,10人全天上线时长100分钟。则100人这组数据,一人一天在线时长的真实值为:
10%*20+40%*50+40%*80+10%*100=64分钟
如果预期的在线时长数据与64分钟相差不多,且在线时长分布图像集中,说明玩家的在线时长符合预期。如果64分钟与预期在线时长不符,或者在线时长图像离散,说明在线时长不符合预期,要调整游戏设定。
2.3 体验设定数据
指与游戏体验直接相关的数值设定,如一场战斗打多久,打死一只怪物要多少刀。体验设定数据在数值计算中是自变量,由这些自变量得出因变量,部分自变量会再根据因变量数值与预期的差距来调整。
思考哪些数据是体验设定数据是游戏数值计算开始前最重要的一环。
这里涉及到一个原则——数值体验和数值平衡是根据游戏运营中的各种数据调出来的。
2.4 技能冷却时间
技能释放后,技能会进入冷却,在冷却时间结束前,技能不能释放。
即时对战中,冷却时间从什么时候开始计算,直接影响规定时间内技能释放的次数。以一个拿刀挥砍的技能为例,技能动作分为前摇、命中瞬间、后摇三部分,命中瞬间的时间=0。如果前摇时间为A,后摇时间为B,技能冷却时间为C,A+B≤C,战斗时间为D,D≥A+B,求技能释放次数:

A=前摇时间,B=后摇时间,C=技能冷却时间
若从技能前摇开始,冷却时间就开始计时,则技能释放次数≈D÷C
若从技能前摇结束后,冷却时间才开始计时,因为每次冷却时间结束后,要再进行一次前摇,才会开始计算冷却时间,所以技能释放次数≈D÷(A+C)
若从技能后摇结束后,冷却时间才开始计时,则技能释放次数≈D÷(A+B+C)
冷却时间从前摇开始的时候,就开始计时的话,规定时间内技能的攻击次数是最多的。
有的同学可能已经注意到了,为什么我在上边用了一个“≈”号,而不是“=”号。举个例子,若D=60秒,C=58秒,则在第59秒还能放一次技能,但如果A=2,B=2,即A+B=4,则技能在第59秒开始释放进行前摇,但前摇还没结束,战斗就已经停止。这就类似于《率土之滨》中,技能已经准备完成,但没释放成功的概念。
所以,对于冷却时间从技能前摇开始的情况,计算其释放次数的精确函数表达式应该:
if(D-C≤0,1,if(D-(A+B)-rounddown(D÷C,0)*C<0,rounddown(D÷C,0),roundup(D÷C,0))
其中,if、rounddown、roundup均是Excel中的函数。其他两种情况的精确表达式,各位同学自行思考。
2.5 最大值和最小值
最大值和最小值是数值平衡计算过程中,极其常用的概念,经常用于计算和调节不稳定数据。

数学中一个区间内的极大值和极小值
以BUFF类技能为例,AB两个单位互殴,A是远程,B是近战,B可以开增伤BUFF,A边打边跑,B要追着A做输出,这意味着在B开增伤BUFF的时候,由于没有追到A,所以B并不是所有技能伤害都能享受到增伤BUFF,假设B增伤BUFF持续时间是25秒,战斗时长为30秒,B追上A全程总共花费时间为10秒,则技能享受增伤BUFF的最大时长是30-10=20秒,最小时长是25-10=15秒,最大时长意味着增伤BUFF持续时间中的一部分用来追人,最小时长意味着开了增伤BUFF后,才开始追人。
在战斗平衡计算过程中,如果用技能收益最大值去计算数值,就意味着实际战斗容错很低,如果用技能收益最小值去计算数值,就意味着实际战斗容错很高。
三、实战演练
数值搭建过程根据是否进行大规模调整进行划分,分为框架搭建和数值调整两个阶段,框架搭建阶段以手填数值为主,涉及数值微调,主要目标是搭框架;数值调整阶段是在框架搭建后,按照对各个因变量的预期,对自变量进行整体的大规模综合调整。
这里以即时战斗游戏为例,引用《英雄联盟》中的职业进行框架搭建阶段的演示,涉及部分数值调整思路。内容主要涉及职业属性,装备属性,战斗平衡。

3.1 定义属性及公式
第一步定义游戏中有哪些属性。
生命值,魔法值,物理攻击,魔法攻击,物理防御,魔法防御,命中值,闪避值,暴击值。
其中,攻击方命中值和防御方闪避值共同得出命中率。
第二步定义计算公式。本游戏中,设定只有三个系统——角色系统、装备系统、技能系统,其他类型的系统,可以根据装备系统的数值设计思路,自行设计。

游戏中的伤害公式及系数设定
总生命值=角色生命值+装备生命值+其他系统生命值
其他属性总值与总生命值的计算思路相同,这里就不罗列了。
物理伤害=攻击方总物理攻击×系数1×(1-防御方物理减免)×技能系数百分比+系数2。防御以防御减免的方式呈现,意味着一定会破防,但也有缺点,攻击方总物理攻击越高,被减掉的伤害就越多。系数1和系数2是设定值,均可调整。
魔法伤害=攻击方总魔法攻击×系数3×(1-防御方魔法减免)×技能系数百分比+系数4。
物理减免=(总物理防御×系数5)÷(总物理防御+等级×系数6+系数7),这个公式首先是除法公式,分母加入等级,使得在装备不变等级提升时,防御减免下降,促使玩家更换高等级装备。系数用来调整图像走势,使走势符合预期。
魔法减免=(总魔法防御×系数8)÷(总魔法防御+等级×系数9+系数10)
命中率=总命中值/(总命中值+总闪避值×系数11)×100%,命中率最低值设定为10%,最高值设定为90%。
暴击率=(总暴击值×系数12)÷(总暴击值+等级×系数13+系数14)
暴击伤害=正常伤害×系数15
其中,暴击率、物理减免、魔法减免、命中率都是隐性数值,游戏中不会直接显示出来,要通过其他显性数值换算。其中,暴击率和命中率,应用纯随机,不做机制上的伪随机处理。
第三步定义攻击判断流程。
攻击未命中
攻击命中,但未暴击
攻击命中,并且暴击
这里使用逐步判断法,即先判断是否命中,再判断是否暴击。则真实暴击概率=命中率×暴击率。对于逐步判断法,判定的优先级越往后,其真实发生概率偏差的就越大。
另一种攻击判断方法是圆桌理论,网上讲的很多,也有优缺点,目前主流游戏多使用复合判断方法。
3.2 定义标准人物属性
将各个属性类型赋值,作为标准人物的1级裸奔属性。

C18到K18是设定的1级标准人物裸奔属性
随后设定各个属性每一级的成长率,等级上限设定为30级,每10级进行一次等级突破,设定下一个10级中,各个属性的成长率高于上一个10级。有下边这个表。

各个等级角色的等级成长系数
再根据1级各个属性的值,及各个属性的成长率,算出下一级的属性值,以生命值为例,公式为:
下一级生命属性值=上一级生命属性值×(1+生命属性值的成长率)
得到1到30级标准人属性,如下图所示:

标准人物各级属性
这里要注意,虽然数值策划在这里使用的是百分比增长,但做系统的时候,如果要显示下一级属性和下一级增长了多少属性,要显示成固定值的形式。
3.3 定义标准人装备属性
设定装备有白、绿、蓝、紫、橙5个品质,靠游戏中怪物掉落,等级有1、10、20、30四个档次。依次将每一种属性单拿出来,按照依品质、等级属性递增的原则,赋予属性成长系数。


装备上各个属性的成长系数
以蓝色品质3级装备的生命值为例,它的生命值属性=标准人3级生命值属性×蓝色装备1级的生命值属性成长系数(因为10级一档,所以3级的装备应用1级的属性增长系数)

对于装备属性成长系数的调整:
如果期望玩家先把30级白装收集完,再去收集绿色1级装备,那么绿色1级装备的属性就应该高于白色30级装备属性,若发现计算结果不符合这个预期,就去调整成长系数。
如果期望橙色装备总属性是同等级角色属性的30%,那么所有橙色装备属性成长系数,就都应该填30%。
具体设定的数值,根据各个系统的预期数值需求进行综合调整。
计算完后,将1、10、20、30级装备属性单拿出来,这就是标准人装备的总属性。


标准人物各品质各等级装备总属性
这里要注意10级、20级、30级装备的属性,要依据角色等级突破后的属性去计算。
如果给装备再加一个强化设定,总共10星强化,就要设定每一星强化后,装备属性的增长系数,再与装备原属性相乘。
如果装备有洗炼设定,就先计算装备总属性,再把洗炼的属性单拿出来做掉落权重和洗炼花费计算,类似于抽奖。
3.4 定义标准装备类型和属性
装备种类设定为武器、头、肩、衣服、腰带、裤子、鞋子、护腕1、护腕2、戒指1、戒指2,共11种装备,将9种属性分配到装备上,保证每种属性下都有大致等量的装备。得到如下所示的表格。

装备分类及装备所携带属性设定
再对每一种属性在不同装备上进行分配,保证每一种装备在属性分配上都占据一定优势,以此确保每一种装备的收集吸引力。

装备上各个属性的占比
之后按照标准人的装备属性,和装备上属性的占比,计算不同装备的具体属性,比如绿色10级武器上的物理攻击属性值=标准人绿色10级装备的物理攻击属性×物理攻击属性在武器上的占比。以此算出不同种类装备的具体属性值。

标准人物不同部位装备属性值
3.5 职业设定及各职业属性
以标准人为基准,为游戏总共设定两个定位差距大的职业——炼金术士和暗夜猎手。
其中炼金术士血量最高,主要是魔法伤害;暗夜猎手输出最高,主要是物理伤害。根据各个职业特点,以标准人的属性为基准,设定炼金术士和暗夜猎手的属性系数。如下图所示:

属性系数及其数值
ABCDE表示属性高低的程度,炼金术士防御高,所以生命值是A,暗夜猎手物理攻击最高,所以物理攻击是B。之后在对ABCDE进行手动赋值,最后转化成各个职业相对于标准人物的属性系数。属性系数也可以直接手填,比如炼金术士生命值系数可以直接手填个2,系数都要在综合计算数值后,根据因变量预期进行调整。
再用各个属性的属性系数×标准人相应属性的属性值,得到各个职业不同等级下的职业属性值。

炼金术士和暗夜猎手的属性值
3.6 各职业装备属性
根据标准人装备属性,及各职业的属性系数,算出各个职业的装备总属性。以炼金术士10级蓝色装备的生命值为例,其数值=标准人10级蓝色装备的生命值×炼金术士生命值属性系数,暗夜猎手和炼金术士的装备总属性如下图所示:

炼金术士和暗夜猎手各个品质、各个等级装备的总属性
再根据不同装备部位的属性分配及属性占比,得出各个职业不同品质、不同部位、不同等级的装备属性。
3.7 各个职业属性汇总
用各职业角色属性+各职业同等级装备总属性,得出各个职业不同等级下的总属性。因为装备有品质区分,所以要用不同品质的装备,分别与角色属性相加,得出各个职业在穿戴不同品质装备时的总属性。

炼金术士和暗夜猎手在穿戴蓝色装备时的总属性
之所以用X等级的角色属性+X等级的装备总属性,是因为游戏的预期设计是玩家以穿戴同等级装备为目标,为了让玩家以此目标进行游戏,怪物的属性设计,也要以这个标准去计算。
如10级怪物的属性,应该以角色等级为10+10级装备的属性去计算,角色等级属性取角色突破前的属性还是突破后的属性,取决于你是想让玩家先去打10级掉突破材料的怪物,还是先打10级掉装备的怪物。如果预期设定为先打10级掉突破材料的怪物,那么玩家打这个怪物时,角色属性处于未突破状态,身上穿的是1级装备,那么怪物属性的计算当取10级未突破角色属性,1级装备属性取那个品质,取决于你想让这个怪物有多强。
到了这一步,就应该进行一波参数和系数调整。

炼金术士穿蓝色装备时,物理减免曲线的变化趋势
则折线图的走势应该满足以下几点:
装备品质和装备等级不变,随着角色等级的提高,减免值降低。因为我们在减免公式的分母中加入了等级,期望不换高等级高品质装备,防御能力就会降低。
角色等级不变,装备品质、装备等级越高,减免值越高,且差距可观。
穿上白色品质等级1的装备,所带来的物理减免或法术减免的增加,应该肉眼可见,不然穿上装备跟没有防御值一样。
甚至于为减免公式增加分段函数,由其是分段函数,大家以后如果要做数值,就会经常用到。
能够方便调节各个成长阶段的属性成长走势。
可以灵活运用各种公式走势的优缺点。
以后如果要拓展属性上限,可以新增一个分段函数,保证整体数值稳定。
3.8 职业玩法和职业技能设定
分别为炼金术士、暗夜猎手两个职业设定玩法,并依据玩法设计技能,这里直接引用《英雄联盟》炼金术士和暗夜猎手的技能设定,加以修改,如下图所示。

炼金术士和暗夜猎手的职业玩法、技能设定
依据技能的特点,对各个技能的参数进行赋值,这些值都是自变量,在职业对抗的预演中,如果最终预演的数值不符合预期,就可以调整这些自变量。这些自变量也严格按照一定的数值标准,比如大招的CD一定是最长的,如果调整自变量数值后,发现大招CD不是最长的,那就是调整错了。

炼金术士技能初步数值

暗夜猎手技能初步数值
移动速度设定为两个职业相同,均为1格/秒。
技能等级设定为4个等级,角色每10级提升一次技能等级,这就意味着角色等级在1、10、20、30级时,技能等级分别为1、2、3、4级。
按照技能等级,手动为各个等级下的技能设定数值,这里的属性值大小会根据职业对抗结果进行最终调整。数值如下

炼金术士的各级技能属性

暗夜猎手的各级技能属性
在实际游戏设计过程中,技能数值是经常会调整的东西,上线后,也会经常涉及技能数值全面调整,技能机制也会因为实际需求进行调整,比如《英雄联盟》中的机器人,加速跑技能后会有一个短时间内降低移速的debuff,给技能加这个机制是因为技能原数值太小,不好做技能等级提升,为了增大技能数值,相应的在技能机制上给机器人加了个削弱。