游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4730|回复: 0

【游戏设计】如何搭建技能实现框架,让你少走弯路【干货】

[复制链接]

4万

主题

5万

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
85814
发表于 2023-9-28 09:09:05 | 显示全部楼层 |阅读模式
微信图片_20230928085701.JPG

写在最前

大家好,我是成风a,一名在游戏行业摸爬滚打4年多的小策划,写这篇文章的主要原因是想对以往的工作经历有个回溯,希望让自己的知识体系更深刻完善的同时,也希望能帮到刚入行或对这方面感兴趣的小伙伴,不过这些仅是以我当前的认知水平所总结的,所以还有很多不足,欢迎大佬们交流,指正。

为什么技能框架搭建如此重要?

微信图片_20230928085702.jpg

出现这种问题的原因在于,前期做战斗的时候因为策划没有用框架的思维想问题,程序也不知道你将来有哪些功待扩展的功能,随着后续版本技能越来越多,越来越复杂,导致维护起来极其繁琐且不稳定。这篇文章的重要意义在于,帮助你梳理出一套扩展性强又好用技能实现思路,这些思路在你以后任何的项目都能用到。看完后,应该会有以下收获:

更深刻的理解技能底层机制、动效表现的实现逻辑
技能表全字段的梳理及解释
技能表数据结构,附模板

如何打造一套扩展性强又好用的技能框架?

要想满足扩展性强又好用,我认为的三个关键点:

  • 程序后期易扩展。一般在项目DEMO阶段,战斗系统就要开始搭建,但起步阶段又不可能就把所有的技能效果规划好,尤其是内容向游戏,你永远不知道战斗策划下一个“奇怪”创意是什么。
  • 功能可复用性。目的是减少开发成本。比如两个A、B技能,技能效果都是造成减速,只是触发条件不同,这时候无需做个全新的减速技能,只要新增触发条件类型即可。聪明的老师们已经发现了,这种思路其实是将一个技能拆分成多个模块,只实现缺失的模块,然后和已有的其他模块快速拼装成一个新的技能。
  • 配置时间成本低。技能相关字段多如牛毛,如果所有字段只放在同一张表上,必然会降低翻看速度、错误排查效率。建立多个分表非常重要,如技能主表、BUFF表、伤害表、动效表现表,我会在文章末尾放上一套模板,供大家参考,用了一周时间呕心沥血整理,好想要大家一个小赞支持支持——

废话不多说,下面是我整理的一套框架,从 能否释放 到 对谁放 再到 生效结果。任何技能必将经历此流程

微信图片_20230928085702_1.jpg

一,释放类型

1,主动释放:满足释放前置条件,玩家主动按键释放。

2,自动释放:满足释放前置条件,自动释放。

微信图片_20230928085702_2.jpg
《明日方舟》能天使3技能,能量满自动释放

3,被动释放:玩家在战斗中因达成某些事件而触发。被动其实是个大类,实际会细分出很多事件小类:如受击x次,血量低于x%,x秒未受到伤害,受到异常状态等。

微信图片_20230928085702_3.jpg
《星铁》卡夫卡

4,混合类型:以上多种类型结合,如主动和被动结合,玩家主动按键后还需满足某个事件才能触发,比如LOL火男,Q技能造成炽热之焰,同时会叠加层数,叠到3层时,爆炸造成百分比魔法伤害。前者炽热之焰为主动类型,只要按键了一定会触发,后者爆炸伤害为被动,必须满足叠加层数才能触发。

微信图片_20230928085702_4.jpg
《LOL》火男

二,释放前置条件

1,技能CD:以时间为单位-秒(s)-参与计算,特点是符合大多数人的认知,减少理解。

  • 独立CD:释放该技能后进入冷切时间,冷却期间无法再次释放该技能。
  • 公共CD:同种类型技能共用一个CD,这种在动作游戏中很常见

微信图片_20230928085702_5.jpg

2,技能消耗:

  • MP值:俗称耗蓝量,每次释放消耗一次MP值,特点是可通过使用消耗型道具回复。
  • 技能能量:相比CD时间更为抽象,所以便于从更多角度控制节奏,但缺点是增加了理解成本。能量展

开后分为:

  • 初始能量:便于做暖风时间,暖风时间 =(能量上限 - 初始能量)/回复速率 。
  • 回复方式:不仅限于按时间回,如按受击次数、攻击次数...
  • 回复速率:根据回复方式配置对应效率。每秒1点或者每打1次回一点。
  • 能量上限:既充满1次能,达到1次释放消耗。
  • 充能次数:每释放1次技能,消耗1次充能,充能次数可叠加,有叠加上限。

微信图片_20230928085705.gif
《明日方舟》角色头顶黄色序号为充能次数,下方绿条为能量值,按时间回复

三、触发范围:

  • 形状类型:圆形,矩形,扇形等
  • 形状大小:用于类型对应的参数设置
  • 中心点绑定位置:如以自身所在的圆,或正前方的矩形。
  • 特殊:如战棋游戏中以格子为最小单位,然后拼装成各种形状。


微信图片_20230928085705_1.jpg
《天地劫》

四、目标选择:

目标选择对技能释放意义重大,相比普攻,技能是低频率高收益行为,精确瞄准释放对象才能使收益最大

化,比如技能1:对单个目标造成500%伤害,并造成出血状态;技能2:对出血状态的敌人额外造成100%

伤害。技能1为单体爆发技,打精英/BOSS收益最大,技能2有了对出血的目标增伤,两者配合对精英/

BOSS更具策略性。筛选要点:①一个技能支持多种目标类型共存;②每种目标类型层层筛选出1个。

1,一个技能支持多种目标类型共存:单个技能可能会同时有两个效果,且每种效果释放对象不一样,如LOL日女的W,对自己加抗性的同时还对敌人造成伤害。

微信图片_20230928085705_2.jpg

2,每种目标类型层层筛选出1个:每一种效果都要走此流程,先选类型,再配置该类型下最大生效目标数量。

  • 选类型:大类型选个能覆盖全部的,比如以阵营划分,小类型以后随着版本需要慢慢扩展,分两个字段控制,这样做的好处是以免所有情况排列组合起来太臃肿。
  • 大类型:0-不生效;1-友方;2-敌方;3-全部;4-仅自己
  • 小类型(大类型中再次选):0-不筛选;1-仇恨值最高;2-生命最低;3-近战;其他可扩展
  • 最大目标数量:也就是我们常说的单体/群攻的目标数量配置,int类型。
  • 备用目标:用处在于如果本次释放,攻击范围内找不到筛选后的目标,需要备用目标继续筛,备用目标的个数和顺序根据自身项目定。

总结:最终逻辑是一个技能支持扩展多种效果类型,每种效果类型选出1个,程序执行的优先级顺序可以通过配置表结构控制。

微信图片_20230928085705_3.jpg

五、伤害计算

战斗公式:

战斗公式包含属性词条、倍率词条,以及运算方式。业界常见的战斗公式可分为减法和乘法两类,两种计算方式有着不同的特点。

减法公式

减法公式举例:伤害 = { [攻击(1+属性倍率)- 防御] (1+技能倍率)} (1+最终伤害倍率)

  • 优点:①理解成本低,每提升1点攻击力,对方防御不变时,伤害也提升1点;②属性购买成长体验明显;③利用刮痧线做数值强策略性。常见于策略回合制卡牌和成长体验卖数值的游戏类型中。
  • 缺点:攻击力的收益受对方防御值的影响,且防御值越接近攻击值,影响的程度越大,尤其是在当防御值>=攻击值,会出现攻击方造成的伤害始终为0的不破防现象,所以防御投放上数值计算上比较困难。

乘法公式

乘法公式举例:伤害 = { [攻击(1+属性倍率)(1-免伤率)] (1+技能倍率)} (1+最终伤害倍率)

  • 优点:①便于战斗力的量化,比起减法公式更容易来做不同职业的动态数值平衡;②伤害按百分比折算,不会出现不破防情况。
  • 缺点:因为免伤率是百分比,后期属性增长到某个阶段收益衰减会越来越快,成长体验糟糕。

注:从战斗公式中可以看出,词条所属的乘区位置直接影响着其价值,需与程序约束好公式中每个词条的代表意义。

伤害类型:常规的类型分为物理,法术,真实,治疗。不同伤害类型用于参与计算的公式不同。

伤害段数:每次释放技能打的次数,本次总伤害 = 伤害公式所得值 * 段数。相信不少同学开始有疑惑了,干嘛用段数这么麻烦的设计,直接打一次换算成同样的总伤害不就行了么?答案还真不是。我直接说做下个人理解:

  • 跟战斗公式有关,技能倍率乘区运算完之后的字段会影响最终伤害,如公式最后的格挡,格挡次数=段数。
  • 单次折算成多次,优点是伤害不容易溢出,缺点是增加了输出时间,与技能DPS的定位有关。
  • 与动效表现有关,为了给人真实性。比如有些技能就是造成持续性伤害


微信图片_20230928085705_4.gif
《DNF》裂波斩

六、附加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 与作者讨论交流

文/成风a
原文:https://zhuanlan.zhihu.com/p/651349804

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-11-22 06:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表