热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

游戏属性数值设定过程分享

转自:http:www.gamelook.com.cn201803323962“在符合玩法体验的前提下,属性设定需满足三个原则:可理解,可见性,收益差异。”一、属性类型设定一个角

转自:http://www.gamelook.com.cn/2018/03/323962

“在符合玩法体验的前提下,属性设定需满足三个原则:可理解,可见性,收益差异。”

一、属性类型设定

一个角色该有什么属性?属性应该有什么样的作用?要不要加点?加点属性的效果又怎样设定?

什么样的战斗体验就有什么样的属性——数值需求是建立在玩家体验上的,而不是凭空产生的。当你希望战斗发生在一个无视地形和地图大小的地方,你当然不需要为角色设定一个跟移动有关的属性。当你希望玩家的攻击能真实的反应其伤害能力时,你就不该做过多的防御属性。当你希望战斗过程要非常讲究操作技巧时,那么你就需要加入移动速度和技能CD。玩一款好的游戏,留意游戏内的属性给你带来了什么样的体验。

1.属性设定原则

在符合玩法体验的前提下,属性设定需满足三个原则:可理解,可见性,收益差异。

可理解:一个好的属性必然是符合常识的,玩家可以轻易的理解它的作用。

可见性:属性在战斗中发挥的作用能被玩家明确地感知到,他知道这个属性在起作用。

收益差异:不同的属性应该在战斗中发挥不同的作用,或者在不同的情景下存在收益差异。

按这些原则,或许你能创建出一些有趣的属性。

1.1 例子——《神界:原罪2》的法术护甲和物理护甲

客观来说,传统意义的防御不是一个好的属性,因为他不怎么可见,他削弱了攻击的效果,而玩家经常不知道防御是如何作用的。我知道他降低了伤害,但具体是怎样作用的呢?同样道理,控制抗性等抵抗类属性也是这样,对玩家来说,这些属性的效果都很不透明,经常让玩家感觉不到他在起作用,而往往一旦你把属性的效果数值提高到玩家可以感知到的地步,通常就会导致一系列不平衡的问题。我们看看《神界:原罪2》是怎么对防御属性进行再设计的。

《神界:原罪2》的物理护甲和法术护甲实质是血的一部分,法术伤害对法术护甲起作用,物理伤害对物理护甲起作用,从整个战斗过程来说,其效果实质和减法公式是一致的,即是从(Atk-Def)*T=Hp 到 Atk*T=Hp+(Def*T)的转变,Def*T即为防御在一个战斗过程的总效果,无非将其转化为Hp的一部分。这样做的好处是防御的效果更加可见,而且不会影响防御效果的外延(定义角色物法个性)。

另外,为了战斗多样化的目的,《神界:原罪2》的状态有多种转化和组合效果,这是特色。但如果不加限制,这些组合效果强度就不好控制了。如果要做控制,就要引入类似控制抗性等属性。但上面说到,控制抗性可见性很差。那么《神界:原罪2》怎么做的呢?他做了一个很精巧的设计:将状态效果分为物理类和法术类,物理类状态在物理护甲未削为0时,基本不命中,当削为0后,必然命中。

问题:《神界:原罪2》这种设计还会带来什么样的影响和好处?要做哪些配套设计?

1.2 例子——《暗黑3》的回血属性

《暗黑3》的回血属性有几种,如击回,秒回,击杀回复,球回等等。为什么要弄这么多呢?因为《暗黑3》是一个很硬核的刷怪游戏,战斗基本就是游戏主体,《暗黑3》的核心是build,实质就是构建在不同情境下收益差异,不管是输出还是生存能力。因此在生存能力上,设计者就需要设计出几种不同的生存机制,而这些生存机制在不同的情景上收益是不一样的。

例如击回,适合于攻击频率非常高,堆攻速可以站撸的build。

秒回,适合攻击频率低,不能站撸的build。

击杀回复,适合片伤杀小怪,低层快速刷秘境的build。

球回,适合走位灵活,堆拾取半径的build(为了保证拾取半径这种半鸡肋属性有效性,暴雪做了很多)。

在属性设定上,如何做到各属性存在收益差异是个很考经验的事情,需要设计对战斗本身有非常深刻的认识,否则很容易会导致属性无效。

保证多种属性同时有效又有收益差异是件很困难的事,所以别轻易加属性类型。

2. 加点属性的设定

一般除了一些基础的战斗属性,我们还会做一些加点属性,例如力敏智体这类。大家在各种游戏中都碰到这类型属性,那么,这类型的属性是为什么存在的呢?它们无非就是一些属性组合的封装,但从对战斗的属性作用上来看,貌似多余(很多游戏会为加点属性设定一些特别的规则让他们有效起来)。

事实上,加点属性的提出,源于以下几个需求:

1)想要让玩家有一定的自由度,但又怕失控。

2)发展方向需要概念和个性封装。

3)降低加点门槛,直接让玩家对战斗属性进行加点,门槛太高。

因此,当我们要做加点属性的属性关联时,就要先要明确我们的角色有什么样的较优的发展方向和个性,并根据性质拆分好加点属性的有效性范围,保证他们都有效。

2.1 RO的加点属性设定

RO是一款很经典的加点游戏,里面各种职业都有多样化的加点方式。他是怎么做到的呢?我们先来分析下他的属性效果。

我们看到,除了体质这个纯生存向属性外,其他属性都是和输出能力有关,其输出能力的作用机制是不一样的,且全职业通用(由于技能的原因,各个职业收益是不一样的。例如盗贼偏向攻速,法师偏向魔法攻击和技能冷却,这其实就大体定义了各个职业的加点方向)。而敏捷,智力,灵巧等也带了一定的辅助生存向属性(回避,法防,冷却)这就定义了以这种加点为主的build必然会有不同的生存方式,而这些生存方式也必然会有缺陷,因此玩家在加点时,为了应对多样的情况,就需要进行加点权衡。

以技能带动主力加点,通过主力加点形成特色和build,然后为每个build留缺陷。

记住build的核心是各种环境下的收益差异,不要做完美的build。

二、属性价值模型

属性价值模型是整个战斗平衡的基础,应该怎么一步步去建立这个模型呢?

1. 确定核心体验

确定核心体验是建立属性价值模型的第一步,但是,究竟什么样的体验才是核心体验呢?是单纯的标准战斗时长吗?是的,这个很重要,但不是全部,要做好战斗,核心体验必须要细化,不同的游戏类型会有不同体验要求,设计者不但要对此有概念,而且要有经验,因为你需要知道玩家会重视什么,而且这种体验要怎么样才算好,这要求设计者对战斗有更深层的认识。

例如: Q5项目英雄要放技能,那么怎么样放技能体验才算好呢?

在炉石,我一个N费随从,比N-1费能优胜多少?

在Q1,总体战斗时长是核心节奏,但玩家其实更关心的还有自身职业的情况,例如我作为输出职业,我关注的是输出能力,那么我能多少回合锤死敌人? 这些与角色属性成长相关的体验,都是需要在一开始定义出来的。

所以体验游戏是很重要的,就算你知道怎么做,但你可能没有相关体验。

2. 战斗时间——伤害与生存能力的桥梁

在角色能力中,伤害能力(Dps)和生存能力(cHp,这里值有效生命,而不是单纯生命属性)是两个完全不同的能力,他们严格来说是无法等价的。但由于我们对战斗的时间有特殊的需求,因此,可以通过时间将两种能力建立一个恒等关系:

cHp=Dps*T

这条公式的恒等逻辑显然易见。而属性的存在,最终都会转化为cHp和Dps的变化值,即 ∆cHp和∆Dps,而在恒等式里,不管是cHp变化或者Dps变化,最后都会引发T的变化,即 cHp+∆Hp=Dps*(T+∆T) cHp=(Dps+∆Dps)*(T-∆T)

为了保证我们战斗时间的恒定,我们会认为,对于造成相同的∆T变化的∆Hp与∆Dps,是等价的,他们的追求成本应该是一致。也就是说,导致相同的∆Hp的属性变化,是等价的,导致相同的∆Dps的属性变化,也是等价的。这就是属性价值模型的基础。

归根结底,属性成长的出现更多是内容消费的需求,不是游戏本质的需求。属性在不停成长,但我们要保证游戏体验不变,所以才会有这个恒等式。

3. 公式体系的选择——属性效用的定义和连接器

属性的效用是建立于公式体系上,没有公式,属性价值无从说起。公式体系定义了各种属性的效用,也是通过公式体系,将所有的属性链接起来。公式体系包括伤害公式和一连串的配套公式,核心是伤害公式。在一般的RPG游戏设计中,流行着两种伤害公式形式:减法公式和乘法公式。要理解一点的是,公式是一种实现设计需求的工具,形式固然可以变化,但减法公式和乘法公式经过多年的验证和沉淀,有着其非常丰富的内涵。我们需要深刻理解两种伤害公式的特性和其适用范围,在理解的前提,再根据自身项目特点进行再修改。

减法公式特性:理解门槛低,可见性强,数字量级越小边界效应越强,外挂系数麻烦,有不破防问题,较强烈的属性获得感。

适用情景:小数值量级,回合制(离散过程),注重htk的战斗,较固化的攻防投放。

乘法公式特性:理解门槛较高,可见性差,没有边际效应,攻防效用稳定,外挂系数方便,无不破防问题。 属性获得感较弱。

适用情景:全数值量级,即时制(连续过程),注重战斗时间的战斗,较灵活的属性投放,强调属性累积。

根据项目的具体情况选择合适的公式体系,根据具体需求对公式进行调整。

4. 减法公式下,属性的效用计算

根据我们前面所说,当确定了战斗时间T和战斗公式后,我们就可以根据恒等式cHp=Dps*T来确定具体属性的效用。

例如在减法公式里可以看到,1点Hp和1/T点Def的效用时绝对等价的,可以合并为cHp,最后还原为cHp=Atk*T,1点Atk对T的影响为

所以,正常来说,1点Hp的效用与1/T点Def等价,1点Atk的效用与T点cHp等价,貌似没啥问题,但当你外挂一个系数时,麻烦来了,任何一个系数都会跟着Def,不管这个系数是不是防御属性。例如如果有技能系数s,那么就会有自身的有效血量会被一个敌人的攻击属性挂钩,意味着敌方的攻击越强,你的有效生命会越高。这是很麻烦的事情,意味着你很难去量化Def的效用。

解决方案:

a.固化属性投放。让Def=aAtk,那么公式将会成为Hp=(1-a)Atk*T*r,在连乘的公式下,cHp和Dps都非常好定义。

b.将公式改为Hp=((Atk+a1+a2)*a3*a4-(Def+d1+d2)*d3*d4)*T,但这个公式从体验层面是不行的,比较违背常规认知,而且这样做了公式的可见性明显就差了。但如果游戏没有命中闪避,只有暴击,还真有游戏这么做。有些游戏暴击或使用技能可以破防,就是用的这类型的公式。

c.用乘法公式

5. 乘法公式下,属性的效用计算

在减法公式的一些缺陷下,乘法公式是如何做的呢?为什么会出现A/(A+k)这种公式类型?

可以看到,1点Hp和1/a点Def的效用时绝对等价的,可以合并为cHp,最后还原为cHp=Atk*T,1点Atk对T的影响为:

所以,在乘法公式下,1点Hp的效用与1/a点Def等价,1点Atk的效用与T点Hp等价。而且乘法公式本身就是连乘结构,理论上每个属性都互相独立,cHp和Dps都很好定义。由于A/(A+1)的结构,cHp最后都会最后都会转化成Hp+a*Def+b*Dodge+c*Parry(想想魔兽为何有圆桌机制的说法)。

对于其他属性,也可以先假定其他属性和∆T不变的情况下,求得其效用(注意,属性效用,价值和属性投放权重都不是一个东西,虽然他们有关系)。

6. A/(A+K)形式的特点

a.由于K是成长的,根据A/(A+K)的形式,要保持在某个百分需要越来越多的A,这个对挖坑非常有利,也就是你可以投放越来越多的属性,却不用担心影响节奏。

b.有上限,A/(A+K)是无限趋近于某个值的。

c.K的计算可选择自身等级或对方等级,以实现不同的设计目的。

d.如果要实现生存能力的差异,需要设计几种投放曲线,例如魔兽分布甲皮甲锁甲板甲,装备的基础护甲不算入属性池,只是为了实现不同的生存能力差异。嗯,《暗黑3》设计师更省事一点,他们直接固化到角色特色上了,这样他们的装备护甲就不需要有多套数值了。

7. 战斗力——给玩家看的战斗力和实际战斗力

战斗力是我们耳熟能详的设定。但要说明一下,我们一般说的战斗力,实质是一个服务于玩家自评和攀比的系统,为了符合直觉,给玩家看的战斗力一般是累加型公式(其实就是一般就是属性量*属性权重之和了,这里的属性权重更多是考虑投放角度的),不管你什么属性涨了,战斗力都会涨,但从我们上面说的定义,战斗力应该是f(自身cHp/标准Dps*自身Dps)的形式,生存能力和输出能力是相乘关系,而不是相加关系。为什么是这样呢,我们不妨用一个极端情况去假设,假如战斗力是生存能力和输出的相加关系,那么0攻N血的角色是否拥有战斗力呢?很明显,是没有战斗力的,除非他带嘲讽或一些其他效果,如果他带嘲讽,那么实质是增加了队友的生存能力,可以用他为队友增加的战斗力去计算其真实战斗力。

在这里,我们不妨用炉石卡牌去说明一下。炉石白板随从有其身材标准,和很多人想的一样,3费标准的身材是攻+血=7,但事实上,不会总是这样,如果出现0/7身板的白板,他必然是个废卡,1/6和2/5基本上也挺废的,对于这些卡,大部分人的想法是必须配个嘲讽的贴片才能用。为什么呢?因为一张白板随从卡的强度,其实是看他在能放上场的时期能提供多少点伤害,也就说,1个3/4的,按在2,3费时期,随从的平均攻击大概是3.5攻,也就是一个4血的随从大几率能站2回合的,因此他大概率能提供6点伤害,反正会比4/3要好点,更加不用说1/6啊,2/5啊甚至6/1这种垃圾身材了。

三、属性规划和投放

建立了属性的价值模型,我们就可以做属性的规划和投放了。

1. 上下限属性投放法(或者叫最大模型法??)

根据cHP=Dps*T的恒等式,我们可以分别拉出cHP合Dps和等级Grade相关的曲线,如Dps=d(Grade),那么cHP=d(Grade)*T,然后根据已设定的属性效果和公式体系,从Dps和cHP分拆出去,就可以获得各属性关于等级的曲线,例如,一个游戏只有攻击,护甲,气血,技能系数,命中率,闪避率等几个属性,使用乘法公式,那就会有总伤害公式:

然后就有cHp=Hp+a*Def+b*dodge,通过核心节奏定义好生命,护甲,闪避的效果比例,即可获得Hp,Def,dodge的投放曲线。Dps那边也是同理,不管s或hit是全成长过程固化还是需要投放,根据需要分好比例去分解就可以了。hit也是可以通过A/(A+k)形式转化的,只不过k就要跟Atk相关而不是Hp了。  由于RPG一般都会涉及多样化的角色能力,相同属性的投放曲线不可能完全一样,我们就需要为一个每各属性的上限和下限分别拉投放曲线,并控制其极限情况下的T不会超出我们的预期。设定Tmax=cHpmax/Dpsmin,Tmin=cHpmin/Dpsmax,然后分别获得cHp和Dps的max,min曲线。或者有时候我们只关心Tmin,那么我们只需要拉cHpmin和Dpsmax就好,cHpmax,Dpsmin最后会根据属性价值和投放自由度反推就好。

2. 属性池投放法

属性池投放法是一种灵活的属性投放方式,他一般很少用于整体的属性投放,而是用在一些玩家可以自由选择属性的系统中。例如加点,装备宝石里的各种随机属性。该投放放法将一个系统投放的所有属性看成是一个池子,不管投放什么类型属性,不管各个属性投放多少,最后只要挤满这个池子就行了。因此属性投放法会引入以下几个参数:容量池大小S,属性权重Q,属性量A,属性范围n,根据前面的设定,有:

其中k是一个修正系数,它的作用是在一些无限制的属性池里,玩家过于追求单一属性导致该属性突破设定上限。一般来说,如果不是希望完全自动生成属性的系统,我们也只是用该公式规范投放是否平衡而已,我们可以定死属性量和属性范围,让系统投放既具备一定的自由度,也可控。这样的情况很常见,例如加点属性就是。前面说过怎么去关联加点属性和基础属性的关系,那么具体一点加点属性等于多少基础属性呢?用这条公式就可以解决。

最后说下属性权重Q,它一般就是属性效用,但是在设定权重的时候,要考虑属性的适用情景。例如防御这种属性,假如它的效用是10,攻击的效用也是10,但在玩家的心目中,攻击的价值会比防御高,为什么呢?因为攻击的适用情景范围要大于防御,很多时候PVE战斗,用不了多少防御,但攻击基本上是100%情景适用。这个时候,你就得考虑降低防御的权重,但降低权重的同时,你得控制好投放上限。  通过上下限投放法和属性池投放法,基本就可以应付大部分系统的投放需求了。

3. 属性规划——系统维度

在确定了角色的整体属性数值后,由于不会在一个单一系统投放所有的属性,我们要在系统维度对属性进行规划。不同系统的投放比例可以根据该系统的在游戏定位和有效性去设定。另外,不一定是所有属性在每个系统都一致,一方面要看系统需求,一方面要看属性定位。另外属性划分比例要留意阈值问题,特别是减法公式体系的项目。

一个属性分配例子

如果你不想让某个属性的最大和最小值差异太大,可以在某些固化途径中集中投放它(如装备基础属性),在一些自由度高的途径,如加点,宝石等减少它的投放。典型的例子就是防御,看看《魔兽》和《暗黑3》是如何处理防御的投放的。

4. 属性规划——用户维度

在网络游戏设计,我们需要将一部分属性拿出来卖给玩家。那么,假如我们拿了30%的属性(这个比例要看游戏定位)出来,该如何规划这些属性呢?应该从哪个系统拿出这属性,而这些属性又该卖多少钱?这些问题从来只有一个答案,就是来自于项目和市场本身的需求。数值同学需要理解这些需求,并根据需求划分属性。同样地,这个维度的属性规划也要注意阈值问题,特别是减法公式体系。

在游戏中,玩家花钱是自由意愿的,怎么能保证各种R就能追求到对应比例的属性呢?这就涉及到另外一个属性规划的问题了:性价比曲线的管理。

5. 性价比曲线管理

属性投放的性价比曲线实质就是属性价值和追求难度(可以理解为钱或者时间)的比值变化曲线,为了让玩家跳坑,所有属性追求难度一开始都是玩家可接受的程度,然后我们会把这个难度提高,对应就是性价比越低。那么从曲线本身设计的分析,我们就需要关注3点:起点,曲率变化,终点

为了强化玩家对属性价值的预期,我们会把所有系统的属性性价比曲线趋向一个定值,但在到达这个定值之前,该曲线是可灵活设定的。例如在某个等级新解锁了一个功能,为了让玩家能跳坑,得为它设定一个有吸引力的性价比。 另外,结合前面的总量规划,系统的属性投放就会形成不同的定位:如低总量高性价比(大众型消费),高总量高性价比(门槛较高的中R型消费)等等,曲线的曲率平坦或陡峭,也会影响该系统的属性投放个性。


推荐阅读
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • electronvue使用electronupdater实现自动更新
    今天呢,给大家带来一篇干货满满的electron-vue自动升级的教程,话不多说,开始我的表演!配置文件package.jsonbu ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 在使用Visual Studio构建项目时遇到了IntelliSense错误,具体表现为预期的')'未找到。本文提供了详细的解决方案和可能的原因分析。 ... [详细]
  • 本文探讨了如何利用数组来构建二叉树,并介绍了通过队列实现的二叉树层次遍历方法。通过具体的C++代码示例,详细说明了构建及打印二叉树的过程。 ... [详细]
  • 本文详细介绍了Elasticsearch中CVE-2015-3337目录遍历漏洞的具体情况,包括漏洞的影响范围、复现步骤及相关的安全建议。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 本文探讨了Web API 2中特性的路由机制,特别是如何利用它来构建RESTful风格的URI。文章不仅介绍了基本的特性路由使用方法,还详细说明了如何通过特性路由进行API版本控制、HTTP方法的指定、路由前缀的应用以及路由约束的设置。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • ZOJ 2760 - 最大流问题
    题目链接:How Many Shortest Paths。题目描述:给定一个包含n个节点的有向图,通过一个n*n的矩阵来表示。矩阵中的a[i][j]值为-1表示从节点i到节点j无直接路径;否则,该值表示从i到j的路径长度。输入起点vs和终点vt,计算从vs到vt的所有不共享任何边的最短路径数量。如果起点和终点相同,则输出无穷大。 ... [详细]
author-avatar
yishengyishi2004929_621_834
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有