设计MOBA技能系统(理论篇)

发表于2016-11-20
评论1 8.6k浏览


前言
  该系列分为3篇,基于dota和自己的理解来写,欢迎各路豪杰讨论和拍砖
  该系统设计分三篇:
  理论篇:解释技能实现机制,我是链接
  分析篇:基于dota2技能源码来分析,我是链接
  代码篇:编码结构设计,我是链接

抛个问题
  如何用一套机制实现地震、魂之挽歌?
  先来看看沙王的大招


它有几个特点:
1.吟唱
2.持续施法,并且能释放其他技能或普攻
3.每次后续震击都会提高伤害传播半径

为了实现这个技能,我把技能抽象出几个状态


  ps:XX状态,指一个持续的过程,便于外部获取做逻辑判断
  吟唱状态:也叫引导,一段循环动作,持续施法,打断进入cd,例如使用TP回城(可以取消)
  前摇状态:动作前一小段,打断不进入cd,例如拿把菜刀砍人的抬手式(可以取消)
  施法状态:动作中间的一小段,一般在这个阶段添加打击点(无法取消)
  后摇状态:动作后一小段,在期间无法切换到其他动作,但可以被特定行为打断,例如s键取消操作(可以取消)
  技能元素:Dota2叫Modifier, 指具体的技能实现类,例如在XX帧时播放一个音效,放出一个魔法弹,或者一次伤害



  基于上面的技能流程图,我们来验证下能否实现沙王的地震


1.发出技能命令(略过判断)
2.进入前摇,假定没有前摇
3.进入吟唱,播放吟唱动作,持续2秒,期间打断进入cd
4.进入施法,给自己加一个buff_a,附带震荡表现效果,持续3秒,每0.5秒一次震击,对周围敌人造成110魔法伤害,并且提高伤害半径,并对敌人触发buff_b(附带减攻速移速效果,不可叠加)。
5.没有后摇,施法结束,沙王可以继续释放技能
ps:分析篇对技能源码来解释说明,我定义的buff_a在dota2中是被切分成多个modifier,原理差不多。

再来验证下影魔的魂之挽歌



1.发出技能命令(略过判断)
2.进入前摇,影魔这个技能的前摇有1.67秒,期间打断不进入cd,这就是为什么那么NB的地方
3.进入施法,播放施法特效,并以自身为圆心,向四周发射虚拟子弹,对敌人造成伤害并添加一个降4.低攻击力持续5秒的buff_c,所以距离越近被子弹击中越多,伤害也越高
进入后摇,可按s键取消
ps:影魔的是前摇,沙王的是吟唱

问题
  角色动作和技能如何匹配?
  假如一个技能2秒放完,放到另一个模型上播放,而它的动作只有1.5秒,那么会强制降低动作播放帧数,使其匹配2秒技能,看上去动作会有点变慢
  可否配置多个技能元素?
  可以,在前摇和后摇间,可以配置多个事件点,例如多段打击

总结
  技能应该被拆分成若干的元素,降低复杂度,采用组件、命令等设计模式,并且能在运行中获取到该技能的状态。
  这套机制和dota2实现不太一样,下篇基于dota2技能源码详细说明区别。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论