写在最前
大家好,我是成风a,一名在游戏行业摸爬滚打4年多的小策划,写这篇文章的主要原因是想对以往的工作经历有个回溯,希望让自己的知识体系更深刻完善的同时,也希望能帮到刚入行或对这方面感兴趣的小伙伴,不过这些仅是以我当前的认知水平所总结的,所以还有很多不足,欢迎大佬们交流,指正。
为什么技能框架搭建如此重要?
出现这种问题的原因在于,前期做战斗的时候因为策划没有用框架的思维想问题,程序也不知道你将来有哪些功待扩展的功能,随着后续版本技能越来越多,越来越复杂,导致维护起来极其繁琐且不稳定。这篇文章的重要意义在于,帮助你梳理出一套扩展性强又好用技能实现思路,这些思路在你以后任何的项目都能用到。看完后,应该会有以下收获:
更深刻的理解技能底层机制、动效表现的实现逻辑
技能表全字段的梳理及解释
技能表数据结构,附模板
如何打造一套扩展性强又好用的技能框架?
要想满足扩展性强又好用,我认为的三个关键点:
- 程序后期易扩展。一般在项目DEMO阶段,战斗系统就要开始搭建,但起步阶段又不可能就把所有的技能效果规划好,尤其是内容向游戏,你永远不知道战斗策划下一个“奇怪”创意是什么。
- 功能可复用性。目的是减少开发成本。比如两个A、B技能,技能效果都是造成减速,只是触发条件不同,这时候无需做个全新的减速技能,只要新增触发条件类型即可。聪明的老师们已经发现了,这种思路其实是将一个技能拆分成多个模块,只实现缺失的模块,然后和已有的其他模块快速拼装成一个新的技能。
- 配置时间成本低。技能相关字段多如牛毛,如果所有字段只放在同一张表上,必然会降低翻看速度、错误排查效率。建立多个分表非常重要,如技能主表、BUFF表、伤害表、动效表现表,我会在文章末尾放上一套模板,供大家参考,用了一周时间呕心沥血整理,好想要大家一个小赞支持支持——
废话不多说,下面是我整理的一套框架,从 能否释放 到 对谁放 再到 生效结果。任何技能必将经历此流程
一,释放类型
1,主动释放:满足释放前置条件,玩家主动按键释放。
2,自动释放:满足释放前置条件,自动释放。
3,被动释放:玩家在战斗中因达成某些事件而触发。被动其实是个大类,实际会细分出很多事件小类:如受击x次,血量低于x%,x秒未受到伤害,受到异常状态等。
4,混合类型:以上多种类型结合,如主动和被动结合,玩家主动按键后还需满足某个事件才能触发,比如LOL火男,Q技能造成炽热之焰,同时会叠加层数,叠到3层时,爆炸造成百分比魔法伤害。前者炽热之焰为主动类型,只要按键了一定会触发,后者爆炸伤害为被动,必须满足叠加层数才能触发。
二,释放前置条件
1,技能CD:以时间为单位-秒(s)-参与计算,特点是符合大多数人的认知,减少理解。
- 独立CD:释放该技能后进入冷切时间,冷却期间无法再次释放该技能。
- 公共CD:同种类型技能共用一个CD,这种在动作游戏中很常见
2,技能消耗:
- MP值:俗称耗蓝量,每次释放消耗一次MP值,特点是可通过使用消耗型道具回复。
- 技能能量:相比CD时间更为抽象,所以便于从更多角度控制节奏,但缺点是增加了理解成本。能量展
开后分为:
- 初始能量:便于做暖风时间,暖风时间 =(能量上限 - 初始能量)/回复速率 。
- 回复方式:不仅限于按时间回,如按受击次数、攻击次数...
- 回复速率:根据回复方式配置对应效率。每秒1点或者每打1次回一点。
- 能量上限:既充满1次能,达到1次释放消耗。
- 充能次数:每释放1次技能,消耗1次充能,充能次数可叠加,有叠加上限。
三、触发范围:
- 形状类型:圆形,矩形,扇形等
- 形状大小:用于类型对应的参数设置
- 中心点绑定位置:如以自身所在的圆,或正前方的矩形。
- 特殊:如战棋游戏中以格子为最小单位,然后拼装成各种形状。
四、目标选择:
目标选择对技能释放意义重大,相比普攻,技能是低频率高收益行为,精确瞄准释放对象才能使收益最大
化,比如技能1:对单个目标造成500%伤害,并造成出血状态;技能2:对出血状态的敌人额外造成100%
伤害。技能1为单体爆发技,打精英/BOSS收益最大,技能2有了对出血的目标增伤,两者配合对精英/
BOSS更具策略性。筛选要点:①一个技能支持多种目标类型共存;②每种目标类型层层筛选出1个。
1,一个技能支持多种目标类型共存:单个技能可能会同时有两个效果,且每种效果释放对象不一样,如LOL日女的W,对自己加抗性的同时还对敌人造成伤害。
2,每种目标类型层层筛选出1个:每一种效果都要走此流程,先选类型,再配置该类型下最大生效目标数量。
- 选类型:大类型选个能覆盖全部的,比如以阵营划分,小类型以后随着版本需要慢慢扩展,分两个字段控制,这样做的好处是以免所有情况排列组合起来太臃肿。
- 大类型:0-不生效;1-友方;2-敌方;3-全部;4-仅自己
- 小类型(大类型中再次选):0-不筛选;1-仇恨值最高;2-生命最低;3-近战;其他可扩展
- 最大目标数量:也就是我们常说的单体/群攻的目标数量配置,int类型。
- 备用目标:用处在于如果本次释放,攻击范围内找不到筛选后的目标,需要备用目标继续筛,备用目标的个数和顺序根据自身项目定。
总结:最终逻辑是一个技能支持扩展多种效果类型,每种效果类型选出1个,程序执行的优先级顺序可以通过配置表结构控制。
五、伤害计算
战斗公式:
战斗公式包含属性词条、倍率词条,以及运算方式。业界常见的战斗公式可分为减法和乘法两类,两种计算方式有着不同的特点。
减法公式
减法公式举例:伤害 = { [攻击(1+属性倍率)- 防御] (1+技能倍率)} (1+最终伤害倍率)
- 优点:①理解成本低,每提升1点攻击力,对方防御不变时,伤害也提升1点;②属性购买成长体验明显;③利用刮痧线做数值强策略性。常见于策略回合制卡牌和成长体验卖数值的游戏类型中。
- 缺点:攻击力的收益受对方防御值的影响,且防御值越接近攻击值,影响的程度越大,尤其是在当防御值>=攻击值,会出现攻击方造成的伤害始终为0的不破防现象,所以防御投放上数值计算上比较困难。
乘法公式
乘法公式举例:伤害 = { [攻击(1+属性倍率)(1-免伤率)] (1+技能倍率)} (1+最终伤害倍率)
- 优点:①便于战斗力的量化,比起减法公式更容易来做不同职业的动态数值平衡;②伤害按百分比折算,不会出现不破防情况。
- 缺点:因为免伤率是百分比,后期属性增长到某个阶段收益衰减会越来越快,成长体验糟糕。
注:从战斗公式中可以看出,词条所属的乘区位置直接影响着其价值,需与程序约束好公式中每个词条的代表意义。
伤害类型:常规的类型分为物理,法术,真实,治疗。不同伤害类型用于参与计算的公式不同。
伤害段数:每次释放技能打的次数,本次总伤害 = 伤害公式所得值 * 段数。相信不少同学开始有疑惑了,干嘛用段数这么麻烦的设计,直接打一次换算成同样的总伤害不就行了么?答案还真不是。我直接说做下个人理解:
- 跟战斗公式有关,技能倍率乘区运算完之后的字段会影响最终伤害,如公式最后的格挡,格挡次数=段数。
- 单次折算成多次,优点是伤害不容易溢出,缺点是增加了输出时间,与技能DPS的定位有关。
- 与动效表现有关,为了给人真实性。比如有些技能就是造成持续性伤害
六、附加BUFF
- 类型:增益,减益。在状态抗性,驱散,正负美术表现反馈时用到。
- 效果:
- 属性buff:如以百分比或固定值的形式改变某些属性。
- 控制buff:如减速,眩晕,冰冻,束缚,恐惧,魅惑,击飞等
- 伤害buff:如每xx秒扣除xx点伤害。当数值为负数,扣除相当于治疗。
- 驱散buff:清除某类型Buff,使之失效。
- 功能buff:改变战斗相关功能或资源的buff,如使目标无法释放技能、改变攻击范围,或改变经济费用。
- 其他buff:位移,传送,复活,增加标记等
- 效果参数:用于技能效果对应的参数设置。字段一般为数组类型。
- 生效时机:在【伤害计算】前还是之后,对最终效果有影响。
- 持续时间:从生效到消失的时间。一般单指一个周期。
- 生效次数:指上一步要循环的周期数。
- 生效间隔:周期间的冷却时间。
- 释放者死亡BUFF是否消失
- BUFF叠加:
- buff分组:不同组buff直接叠加,同组buff按下面规则叠加。
- 最大叠加数:同组buff叠加到指定最大层数后无法继续叠加。
- 叠加方式:效果叠加,持续时间按下面刷新方式。
- 叠加持续时间刷新:1-不刷新,保持原来的剩余生效时间;2-刷新,重置持续时间。
- buff等级:在技能养成游戏中会用到,同组buff,每个buff等级不同,效果参数不同。
七、动效表现
1,攻击方
- 前摇动作:俗称抬手动作,在关键帧之前,被打断后无法释放技能或普攻。
- 关键帧:动作播放到关键帧开始计算伤害,需美术在动作动画中打标记。
- 后摇动作:俗称收手动作,在关键帧之后。打断后摇可快速进入下次攻击,MOBA中的走A就是此原理。
- 是否闪放:打断上一动作直接做攻击动作。
- 攻击类型:1-近战;2-远程。
- 位移类型:1-直线;2-跟随怪物;
- 位移参数:根据类型配置对应参数。
- 攻击特效:资源id配置;特效播放延迟时间。
- 子弹特效:攻击类型为远程时才生效。
- 子弹运动:
- 运动轨迹:1-直线;2-螺旋;3-抛物线
- 轨迹参数:根据类型配置对应参数。
- 是否实时跟随:飞行过程中是否实时刷新目标位置并实时跟随。
- 飞行速度:决定允许玩家反应时间的一部分。
- 穿透类型:1-不穿透;2-原方向穿透;3-跳弹附近怪物
- 穿透参数:穿透类型对应参数配置。
- 攻击音效
2,受击方
- 受击动作:1-默认;2-击倒
- 受击特效:1-默认;2-指定
- 特效挂点位置:1-头部;2-上身;3-腰部;4-脚下
- 受击关键帧:用于扣血时机、飘字时机设置。
- 位移类型:1-直线;
- 位移参数:根据类型配置对应参数。
- 受击音效
八、技能表参考
技能表参考可加微信:wzc1217131165 与作者讨论交流
原文:https://zhuanlan.zhihu.com/p/651349804