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 @   hellozjf  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示