游戏战斗数值框架搭建入门

Posted 智慧 + 毅力 = 无所不能

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏战斗数值框架搭建入门相关的知识,希望对你有一定的参考价值。

转自:http://www.gameres.com/485798.html

设计一个游戏DEMO的时候要干的第一件事是什么呢?是搭建数值框架,而如果是一个打打杀杀的游戏,第一步要搭建的就是战斗数值的框架了。

  AT君最近在自己尝试着做一些塔防的DEMO,并且获得了一些搭建数值框架的经验,在这篇文章中直接以实例的方式总结一下,如何着手从零搭建一个游戏的数值框架。

  打打杀杀的游戏第一步要确认的是攻防关系,以及游戏的基本节奏。AT君所做的是一个塔防游戏,简单来说就是玩家的化身是一个塔,不断的攻击从四面八方向塔逼近的一波一波的怪物,直到击败一关中的所有波次,或被怪物打败——也就是说是一个有些类似于《抢滩登陆战》的游戏,只不过塔是自动攻击的。

  AT君第一件确认的是单关的长度。由于是为手机游戏设计DEMO,因此单关长度要在3分钟以内。接下来就是3分钟的时间,要让玩家感受多少波次比较合适呢?这是一个比较个人化的体验所带来的决定:15秒一波,既不会密到喘不过来气,也不会松到觉得无聊。经过6波普通波次的战斗后,迎来30秒的BOSS波次,这样一来一关是120秒的时间,符合3分钟以内的标准,而且为以后扩充留下了一定空间——8波甚至9波也是可以做的,但由于目前要做最小化的DEMO,因此AT君认为这个波次6+1,一共120秒的设计是OK的。

  这样我们得出了数值框架的第一部分:一波15秒,一关120秒。

  一波15秒,所发生的事情是什么呢?最基本的事情是怪物冲向玩家,玩家把怪物们打死。那么一个标准的无伤模型就是最后一只怪物冲到玩家面前的时候,正好全部被玩家打死,接下来立刻就刷新了下一波。由于玩家的英雄站在地图中间,那么我们能够得出:

  【结论2】假设标准怪物的移动速度是1,那么地图的半径就是15,英雄的攻击半径也是15。

  接下来要定的是一个标准波次有多少怪物,每个需要玩家的英雄攻击几下来打死。这是在奠定游戏的基本节奏,因此非常关键。AT君想要的是偏“无双”风格的游戏,怪越来越多,被玩家的英雄哗哗的干死,非常爽快的游戏,因此标准怪物要很多。AT君一拍大腿,决定标准波次要有15个怪物,之后的每一波都比前一波多5个怪物,游戏一共有7波,那么分布就是这样的:

  15个标准怪物
  20个标准怪物
  25个标准怪物
  30个标准怪物
  35个标准怪物
  40个标准怪物
  1个标准BOSS

  我们可以看到,怪物数量增加的速度非常快,最后一波标准怪物是第一波的两倍还要多,因此一定可以达到非常爽快的目的。当玩家用标准英雄去玩这个关卡的时候,得到的就是一个标准模型了。

<ignore_js_op>技术分享

 


  我们假设一个标准怪物是40血,那么第一波共15个怪就是有600血,玩家的英雄要在15秒内造成600点伤害,因此我们得出:一个标准英雄的秒伤是40。那么标准英雄打一个标准怪物要打几下呢?至少要是2下,因为一定会存在血比标准怪物少的怪或单下伤害比标准英雄高的英雄。那么我们就得出了:

  【结论3】假设一个标准怪物的生命值是40,则标准英雄的单体伤害为20,攻击间隔为0.5秒。

  我们确定了英雄攻击力和怪物生命值的关系,接下来需要确定的是怪物攻击力和英雄生命值的关系。标准怪物都是近战的,那么我们以什么为标准呢?由于第一波怪是一定会被标准英雄无伤打死的,因此英雄的死亡时间一定是在15秒至120秒内。玩家纯挂机必须是不能见到BOSS波次的,因此死亡时间可以缩短至15秒至90秒内。AT君一拍大腿,认为标准英雄的死亡时间应该是在60秒,也就是第四波怪刷出来的时候。由于怪物攻击英雄会不断随着数量的减少而减少DPS,再加上AT君的高等数学已经全都忘光了,因此经过连算带测,得出的结论是:

  【结论4】假设英雄的生命值为1000,那么标准怪物的秒伤为5。

  接下来是BOSS,AT君将标准BOSS的生命值设定为了45个标准怪物的生命值,即1800(相当于第七波的总生命值),在移动速度与普通怪物相同的前提下,可见其近身至英雄身边会损失600生命值。玩家如果在BOSS波什么都不干,只靠平A挂机,是一定会被BOSS打死的,由于我们已经设计好BOSS波次要在30秒之内完成,因此BOSS的秒伤要至少是1000/15=66.6666,AT君一拍大腿将其定成了100,这样一来假设玩家的英雄满血进入BOSS波次,之后什么都不干纯挂机,会在25后结束游戏,BOSS剩余800血。这样我们就得出了:

  【结论5】标准BOSS的生命值是1800,移动速度为1(即等于标准怪物的速度),秒伤为100。

  若我们从另外一个思路来考虑:如果我们要求BOSS波25秒结束游戏,且前提是BOSS移动速度为1,那么如果我们要求BOSS打死玩家的时候还剩一半血,就可以得出BOSS的血量=25秒*英雄秒伤/1/2=25*40*2=2000血,秒伤=英雄血量/(25秒-BOSS移动速度*地图半径)=1000/(25-1*10)=100。我们只定了要求BOSS波纯挂机25秒结束,BOSS剩余一半血,移动速度为1,就能够得出BOSS的血量和秒伤啦,并且是能够得出理论上的极值的。

  到了这里我们可以总结一下我们得到的数据:

  标准怪物:

  生命值:40
  移动速度:1
  射程:0.1(即近战)
  攻击力:5
  攻击间隔:1

  标准BOSS:

  生命值:1800
  移动速度:1
  射程:0.1(即近战)
  攻击力:100
  攻击间隔:1

  标准英雄:

  生命值:1000
  不能移动
  射程:15(或无限)
  攻击力:20
  攻击间隔:0.5

  标准关卡:

  怪物刷新点至英雄距离:15
  刷怪间隔:15秒
  第1波:15个标准怪物
  第2波:20个标准怪物
  第3波:25个标准怪物
  第4波:30个标准怪物
  第5波:35个标准怪物
  第6波:40个标准怪物
  BOSS波:1个标准BOSS

  这样我们就得出了一套最最最基本的数据,游戏已经可以玩啦。回顾一下我们是如何得出这些内容的,经历了几个步骤:

  根据单局时长和想要的游戏节奏 => 得出移动速度、地图大小、波次间隔;
  根据撸怪风格和标准怪物生命值 => 得出怪物数量、英雄秒伤;
  根据我们认为合适的英雄死亡节奏 => 得出怪物的秒伤;
  根据我们认为合适的BOSS波节奏 => 得出BOSS的属性;

  这样一来,我们只要改变以下几个最基本的值,其他的值都会跟着联动:

  标准单局时间:120秒
  标准波次结构:6普通波+1BOSS波
  标准波次的间隔:15秒
  准怪物移动速度:1单位/秒
  标准怪物生命值:40
  标准英雄打标准怪物几下打死:2
  标准怪物在标准波次的个数:15个
  英雄挂机死亡时间:60秒
  标准英雄生命值:1000
  标准BOSS的移动速度:1单位/秒
  英雄BOSS波挂机死亡时间:25秒
  英雄BOSS波挂机死亡剩余生命值:44.4444%

  我们会发现,虽然是在搭建战斗数值框架,但实际上和攻击力啊,攻击速度啊,生命值啊直接相关的数值非常少——只有一个我们假设的标准怪物生命值和标准英雄的生命值作为基础单位而已。一切都是在游戏的基本节奏定了之下推算出来的数值,我们会发现,单局时间,单波波次,挂机死亡时间,这些都是时间,也就是节奏,这些是我们需要确定的数据,这些是我们想要产生的体验,而最终得到的攻防数值都是为这些服务的。当我们看到别人的游戏的时候往往看到的是这些果,经常有人连篇累牍的分析别人的游戏数值是什么样的,这个单位的攻击力是多少,但不能掌握那个“为什么这些数值要这么定”的因的话,是在做本末倒置的无用功,直白点说就是还停留在门外汉的级别啦,外行看热闹而已。因此,对于一个战斗数值框架来说,最优先的是定基本的“节奏”,这是由空间上和时间上两方面来决定的,其他的一切数值基本都是水到渠成,定了一个就能推算出来其他的。

  总之,最重要的是方法论,要做到每个数值维度的设计都是有道理有基础的,而不是凭感觉拍脑袋拍出来的,这样之后我们调整的时候才会有方向,出了问题可以不断的对这套数值框架进行验证与调整,避免像AT君一样陷入曾经的“傻媳妇和面”窘境——一切凭感觉拍脑袋,最终只能面多了兑水,水多了兑面,然后是无尽的测试地狱。平衡不可能全都是纸上谈兵,一定会需要依靠测试来调整,但那些没有理论依据,只靠测试来调平衡的绝对是愚蠢的不靠谱做法,等着程序员、测试员和老板骂死你吧。

  说了这么多,相信很多人已经开始早就怀疑一个问题了:目前这个模型是玩不下去的,英雄只能普通攻击,到了60秒的时候就死了!怎么才能获得最终的胜利呢?

  这里亮点登场——锵锵锵,AT君设计的这个游戏,是一款TCG游戏!玩家要配一套牌组,带进游戏中去施放,和传统的TCG一样,每张牌都需要支付一定的费用才能打出,不足的这部分能力就要靠卡牌来实现了。那么接下来我们就需要解决一个问题了:

  1费值多少?

  每个问题都要有一个基本的原点,我们假设1费值1条标准怪物的命,那么我们就可以得出:

  【结论6】假设1费值1条标准怪物的命,那么1点费用用于攻击时,价值是40点伤害。

  游戏中一共有15+20+25+30+35+40个标准怪,以及一个生命值相当于45个标准怪的BOSS,生命值总计210*40=8400。游戏时间120秒,普通英雄一共造成了120*40=4800点伤害,剩下的3600伤害要从卡牌里出,我们就能得出,一局游戏如果想无伤通关,需要3600/40=90点费用,一局游戏120秒,那么得出了下一个结论:

  【结论7】每1.3333333秒产生1点费用。

  也就是说,如果玩家带的都是10费的卡,平均每13.3333秒能够打出1张。我们可以根据玩家的卡组平均费用的出玩家平均多久打出一张牌,由于AT君并不想要让游戏的强度太高,一场游戏下来操作次数不要超过30次为妙,平均每4秒出一次牌,平均费用为4*1.33333=5.3333333,这就是我们的标准卡组平均费用啦。

  以从结论6为标准,我们可以得出其他一系列其他的卡牌设计标准。比如,伤害提高100%的卡牌,1费值持续多久?按照标准英雄计算,值1秒,英雄的秒伤为40,这个效果只要持续1秒就提供了40点伤害。只要是以各种方式增加伤害的,我们都可以用标准英雄为模板来计算其收益。

  另外一种则是与英雄生命相关的,比如1张X费的牌效果是为英雄恢复100点生命值,X应该是多少?一张0费的牌,效果是对英雄造成100点伤害,产生X点费用,X是多少比较合适?由于英雄生命值是另外一套独立的价值标准,因此也需要一个基础。

  我们有一个原则就是,玩家如果只带恢复生命值的卡,必然是会输的。我们知道BOSS的秒伤是100,那么每1点费用恢复的生命值应该是小于133.333333的,否则玩家可以只靠治疗卡牌磨死BOSS,因此我们可以粗略的拍大腿——

  【结论8】用于恢复英雄生命值时,每1点费用应该恢复100点生命值(且不可高于133.3333)。

  接下来会有越来越多的复杂情况,让我们难以预估,1点费用应该产生多强的效果,比如召唤防御塔的平衡标准是什么样的?召唤一个改变路径的墙的平衡标准是什么样的?控制法术的平衡标准应该是什么样的?一局游戏内永久性的提高英雄的能力的平衡标准是什么样的?但只要我们能够找到一个方法论,就可以先得出一个我们认为是正确的平衡标准,然后再通过不断的测试来反复检验我们的平衡标准,这样一来我们就可以通过反复迭代最终得出一个游戏最终的全部数值了,整个框架是一个从最基础的原则一点一点搭建起来的牵一发动全身的动态框架,而不是四处都是拍脑袋拍出来的数值。

  关键还是在于方法论,即便错误,也是可以验证的。而没有方法论,连对错都不知道,就没有验证的基础了。游戏中的最终数值,不一定所有东西都是绝对平衡的,但有框架能保证数值不会崩——比如假设我们一拍脑袋设计了一张1费恢复200生命值的牌,数值就已经崩了,而如果我们没有框架,只靠测,就算经历九九八十一难确定了导致游戏崩的就是这张牌,也不知道应该改到133.3333以下才会不崩,还是只能靠调完了再去无尽的测试,简直是地狱。而框架能让我们逃离这个地狱,这就是框架的价值,地基打得牢,以后填的坑就少,不然就是害人害己害团队害老板了。

以上是关于游戏战斗数值框架搭建入门的主要内容,如果未能解决你的问题,请参考以下文章

Java游戏服务器搭建

2D游戏引擎开发入门

2D游戏引擎开发入门

2D游戏引擎开发入门

如何搭建一个合理的数值框架

Unity 游戏框架搭建 2019 (三十三十一) MenuItem 显示顺序问题 & 类的提取