5-2. 滑铲的逻辑和动画的实现

动画

我们需要快速打断滑铲,所以没用结束滑铲

动画状态机中,使用了 isSlide 这个布尔变量

New State -> blueSlide0,需要 isSlide = true,立即进入

blueSlide0 -> blueSilde1,需要 isSlide = true,完整播放一次之后进入

当 isSlide = false 的时候,如果在 blueSlide0 或 blueSlide1,就进入 Exit

输入控制器

按键盘上的 K 或者 手柄上的LB 触发滑铲

代码

监听按键

Slide 函数

当前没有在滑铲,在地面上,有足够的能量,才能进入滑铲状态

滑铲的时候会先确定一个目标点,然后将自己的层变成 Enemy,这样避免滑铲时受到伤害,然后开启一个滑铲的协程,并扣除滑铲需要的能量

TriggerSlide

在这个协程中,会让刚体不断向目标移动,在移动的过程中,如果刚体不在地面上,或者撞墙了(面朝左撞左墙 或者 面朝右撞右墙),都会退出协程

退出协程的时候,isSlide 变为 false,并且角色的层恢复到 Player

Character.OnSlide

滑铲会消耗能量,能量消耗之后,复用之前的扣血代码,OnHealthChange 是个 ScriptableObject,它会唤起监听它的人,也就是 UIManager

UIManager.OnHealthEvent

现在这个方法不但会调整 UI 上的血量,还会调整 UI 上的能量条

PlayerStatBar.OnPowerChange

isRecovering 设置为 true,以便后续 PlayerStatBar 的 Update 可以慢慢恢复能量条

PlayerStatBar.Update

当能量在恢复中的时候,会获取 Character 中当前的能量,算出百分比,当百分比为1之后就不再增多了

数值

PlayerController

Character

项目相关代码

代码仓库:https://gitee.com/nbda1121440/2DAdventure.git

标签:20240226_2148

posted @ 2024-02-26 22:11  hellozjf  阅读(72)  评论(0编辑  收藏  举报