所谓连招是动作游戏系统中最基础的部分,作为设计者,和你的程序队友阐释这个系统十分重要(除非你同时是程序);至于什么程序需要纠结的结构关系,什么运算优先,什么嵌套···只需你自己的思路清晰,懂的程序的工作方式就可以了。
在开始之前声明一点,这些大部分都是有经过验证的系统,我用的便是我写的,还有部分未验证的,因此这些都是个人经验,没有经过验证的我最后会指出来。
曾经介绍过我们普攻连击的制作方式,不过却不完整,在这里我会更加详细的解释一下攻击动作和受击动作的组成。
所有的攻击动作都由 atk 和 atkidle 组成。atk 是攻击动作的表现,atkidle 是攻击的收招的表现。可以理解 atk 动作即主动硬直动作,atkidle 动作仅为表演动作,是最底级的动作命令,如果有下一个 atk 动作命令即可随意替代该命令。
这两个表现最好通过命名和制作上分开,方便后面的使用。
所谓连招在机制上最粗浅的理解,就是 atk1 衔接 atk2 衔接 atk3……以此类推。
这需要一个很简单的判断,比如:atk1 动作播放期间按键时间小于或等于 0.3,atk1 动作完成后则衔接 a2,否则播放 atkidle1 的动作;期间按键仅记录一次;当 atk 前缀命名的动作全部跑完则重新循环,称之为 loop。
以上这个判断效果完成,操作效果如下:按住攻击键不放,或者在小于、等于 0.3 秒的时间内连续按键,都能触发无限连续 loop。但是这样的情况,是不可能有atk的蓄力效果的,同时也是不可能做间隔连招的效果的。
如果想做蓄力,请务必加上一个判断,如 atk 按键时间大于 0.3 秒未松开的,则终止接下来 atk 前缀的动作衔接,停止按键将清空 atk 操作命令,否则继续上一个判断(简单连招);前提保证你的动作不会少于 0.3 秒。但是会和间隔连招起冲突。
如果想做间隔连招,请务必在蓄力的判断上再做修改,如 atk 按键时间大于 0.3 秒未松开的,则终止接下来 atk 前缀的动作衔接,停止按键将清空 atk 操作命令,否则同时继续简单连招和间隔连招的判断。
机制上的理解为,满足判断条件后,保持 charge 前缀的动作,命令终止则播放指定 charge atk 前缀的动作。需要和上述简单连招做出区分,于是必须要增加判断条件。
如 atk 前缀动作的任何情况下,atk 按键时间大于 0.7 秒未松开,则视为蓄力,否则播放对应动作的 atkidle;charge 动作命令高于 atk 动作命令;满足条件期间任何时候松开按键,都会释放指定动作。
以上判断完成效果如下:按下 atk 键不松,首先会播放一次 atk1,然后会出现蓄力动作 chagre(你的 atk 动作低于 0.7 秒有可能会出现atkidle),然后你任何时候松手将会释放 chagre atk 动作。
当然,还可以有一些更高级的判断,但应该不用再继续说了。
机制上理解为,在“特定”的atk连击结束时,在“规定”时间内按键,进入另一组连击动作的判断;为严格区分“简单连招”,“规定”时间必须长。
其实仅仅是在 else 的判断下做了一个并列的选项。
如 atk 按键时间大于 0.3 秒未松开的,则终止接下来 atk 前缀的动作衔接,停止按键将清空 atk 操作命令(播放对应 atkidle),否则同时继续简单连招和间隔连招的判断;随后判断再次按键间隔时间小于 0.3 秒,则释放 atk 简单连击,大于 0.3 时判断再次按键间隔时间小于等于 0.9 秒,则释放 atk 间隔连击;否则,播放对应 atkidle。
对于连招而言动作打断十分重要,你的哪些动作层级高于哪些动作,因此在你释放连击的时候会有更加流畅的表现。
如 atk 间隔连击,a1→a2→间隔 0.3S-0.9S→a9→a10;
a2 的层级低于 a6,当间隔连击成立的时候,a6 将会替换 a2;a2 的动作不用等到结束就能接上 a6 动作。
还有更常使用的,如闪避动作高于所有 atk 动作,或者高于部分 atk 动作;爆气动作高于 hurt 动作高于任何 atk 动作;命令的层级既可以让动作上衔接更加流畅,也可以让动作游戏的表现更加流畅,操作更加顺滑。
例如:玩家被怪物连续硬直到了,一直播放 hurt 动作无法响应按键操作,这时可以通过爆气来解决眼前的危机。
总之,这是一个容易理解,收益又很高的操作,制作的时候记住一定不要忽略。
受到硬直伤害之后,才会播放的动作,而不是只要受伤就会播放这个动作,hurt 的优先级高于玩家的操作优先级,也就是说你在操作的时候一旦被硬直就会被打断并播放 hurt 动作。
当你已经可以用你的连招攻击敌人了,这时候受到硬直的敌人需要播放 hurt 动作,那么,敌人的 hurt 动作是否只有一种呢?不可能的,有一些人物招式动作幅度很大,因此怪物不适合小幅度的 hurt 动作,那么就需要另一个被击倒或击飞的 hurt 动作。这里先打破一些外行人的幻想,他们幻想所有的受伤动作都是因为物理碰撞而随机表现的,而且还解释不清,这样的天才请你移步吧,后面的你也不用看了。
因此,怎样保证你的攻击动作和受击动作保持一致性?即你前推怪物就后仰,你砸地怪物就倒地,你抓取怪物就前倾。做到如此步调一致的方法其实很简单,即“伤害帧”配置一个指定怪物 hurt 动作的字段,当怪物受到硬直就播放指定的动作。
每个角色必须自带一套完整的受击动作,什么?嫌难做?那没办法。
假设玩家有一套技能可以在一秒内连续打5下,我们需要怎样表现,是否如同街机游戏一般及时响应?或者在当前 hurt 动作没有表现完成之前,不播放下一个 hurt 动作?
这个全部看你自己是想要什么样子的效果,和什么样子的硬直系统,过程中你可以多多尝试。硬直系统怎么和 hurt 有关?有一些项目会配置一个叫做硬直时间的参数控制,即你的受击动作不仅仅是 hurt 动作表现,还要受到一个叫做硬直时间的东西影响。
你可以理解为,hurt 动作时间+硬直时间=准确的受击硬直时间。所以受击表现应项目而异。
从硬直系统开始,嗯嗯,上面的东西应该还比较好懂,这次就讲到这里,再深入的需要理解硬直和动作游戏的更高级设计表现,所以下次我们讲硬直。硬直系统其实更多的是一种观念和深度理解,确切的关系到动作表现。
我相信,在经过下一次详细的梳理之后,绝大部分人能够脱离动作做的好看却不实用的怪圈,到底怎么实用可不单是连招系统能解决的问题。下次再见。
评论区
共 30 条评论热门最新