今天搞一下那个“跳跃攻击”,也就是人在空中往下砍的功能。我寻思着这玩意儿应该不难,不就是跳起来的时候按攻击键嘛
动手开搞
我先是检查角色是不是在地上。这个简单,之前做跳跃的时候就有个变量,比如叫 `isOnGround` ,判断它是不是 `false` 就行。如果是 `false`,那就说明角色在空中,要么是跳起来,要么是掉下来。
我就把攻击按钮的输入加进去。想着,行,如果在空中(`isOnGround == false`),并且按攻击键,那就触发攻击呗。试一下,确实能触发,但是看着特别别扭。
遇到问题
问题在哪?它播放的是我地面攻击的那个动画!你想想,人在半空中,像在平地上一样挥刀,那动作、那姿势,简直不忍直视,飘得很,一点力量感都没有。
找解决办法
这时候我才反应过来,得给空中攻击单独做个动画。至少得有个空中轻击,可能还得有个空中重击,比如那种往下砸的。没办法,只能先回去捣鼓动画。随便弄个简单的空中挥砍动画,先占个位置,叫它 `air_attack_light_anim` 好。
整合新动画
动画搞个大概,就回到代码里。我改下之前的逻辑,现在是:如果在空中,并且按的是轻攻击键,那就播放 `air_attack_light_anim`。如果是重攻击键,那就播放 `air_attack_heavy_anim`(虽然这个重的动画我还没做,但先把逻辑写上)。
这么写之后,发现 `if...else...` 判断开始多起来。跳跃状态、下落状态、地面攻击状态、现在又加个空中攻击状态,感觉有点乱。我想起来之前用的状态机,觉得还是用状态机来管理这些状态切换比较清晰。
于是我加个新的状态,叫 `AirAttackState`。当角色在空中并且按下攻击键时,就切换到这个状态。在这个状态里,专门处理播放空中攻击动画、判断是轻击还是重击、以及后面可能要加的特殊效果啥的。
细化空中攻击
说到轻击和重击,我琢磨着得有点区别:
- 轻攻击: 播放那个快速挥砍的动画,可能允许角色在空中稍微保持一点点之前的水平移动,打起来灵活点。
- 重攻击: (等我做动画之后) 播放那个往下砸的动画,这时候最好让角色水平方向停住,甚至可以给个向下的加速度,显得更有力量感,砸到地面可能还有特效。
伤害判定
光有动作不行,得能打到人。这个好办,我在动画文件里加动画事件。就是在 `air_attack_light_anim` 播放到特定帧(比如武器挥出去那个瞬间),触发一个函数,这个函数去检测攻击范围内有没有敌人,有就计算伤害。重攻击也是一个道理。
后续想法
现在这个空中轻击算是能跑起来,看起来也像那么回事。重击动画还没做,对应的特殊效果,比如向下的冲力、落地的小范围震动啥的,也得等动画弄好再加。
至于那个提到的“特殊技”,我暂时没加。可能是空中重击之后接个或者按住特定键触发?感觉这个可以后面再扩展。先把基础的空中轻、重攻击搞利索再说。
总结一下
今天搞下来,感觉这个跳跃攻击比最初想的要麻烦点,不是简单加个判断就完事。得考虑单独的动画、状态管理、轻重击的区别、伤害判定时机等等。虽然还有东西没做完,但基础框架算是搭起来。就像网上有人说的,这块儿好像确实有不少可以自己琢磨、尝试的地方,比如不同武器的空中攻击方式不一样?以后可以慢慢加。
还没有评论,来说两句吧...