03 拆分动画:起跳-下落-落地

拆分动画:起跳-下落-落地

[TOC]

​ 跳跃动画包含了起跳-下落-落地三个动作,但是持续时间可能与游戏character需要的不符。虽然可以通过修改持续时间来适配,但是更好的方法是将三个动作拆分出来,作为三个状态加入到动画状态机中。

1. 拆分与添加动画State

1. 在sequence中拆分动画

​ 将原来的jump序列拆分为三个序列,仅保留对应的帧。

image-20240325121138277

image-20240325121218945

2. 添加到动画源(source)

image-20240325121327225

3. 在动画状态机中创建 跳转节点(Jump)

image-20240325121613320

4. 添加三个状态

​ 与之前类似,添加play动画,注意取消loop。

image-20240325121733098

​ 设置转移条件:z轴方向速度小于0,可以从起跳进入到下落

image-20240325122057854

​ 最终状态机如图:

image-20240325122957163

​ 其中,land->run的条件是,当前动画播放完成。由于run与idle存在连接,因此不用再次添加land->idle。

image-20240326083048110

2. 调用动画(Character)

​ 在character中通过animation组件,跳转到对应状态节点来调用对应的animation。

跳跃与离开平台

​ 这两个都可以归入跳跃状态节点,它们都应该进入跳跃或者下落的状态。

image-20240326083638785

落地

image-20240326084321659

3. 优化动画(落地滑行)

​ 落地后会有一段时间滑行,原因在于,落地动画还未播放完成,但是已经进入到地面,movement组件允许进行移动,所以出现了滑行的动作(落地动画的最后一帧)。

​ 针对此,解决方案有:

  • 在落地动画未完成不允许移动

    • 设置一个character中的bool变量,表示是否可以移动
    • 默认可以移动
    • 播放落地动画时设置角色停止移动,并设置bool为false
    • 在动画机中,任何动画播放完成,设置该character的bool为true

在移动前检测是否可以移动:

image-20240326093524084

着陆后停止移动并设置变量:

image-20240326093641833

在动画播放完成后,设置角色can move:

image-20240326093843459

  • 更流畅设置:针对落地早些帧的广播——在落地的某一帧就通知全局,可以进行移动(而不是等动画完成再通知)