本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。
工程文件: 玩转UE4(GitHub)
[玩转UE4/UE5动画系统>应用篇>功能模块] 之 倾斜叠加(Lean Additive)(ALS V4实现方案详解)
注: ALS V4是背后第三人称视角,我提供的工程是横板视角。但是倾斜叠加实现的基本原理是大体相同的。
从上面演示视频的倾斜叠加的关闭和开启对比中,我们可以看到ALS V4的倾斜叠加(Lean Additive),由两大部分组成:地面和空中。
我们先以突然退步跑为例解释一下地面部分的效果。下图中,A是角色的Idle动画状态,B是角色退步跑的动画状态(原始动画提供的状态),这里的倾斜叠加就是要生成一个C状态,当角色"突然"退步跑时,在瞬时加速度的作用下先由A状态到C状态,速度稳定后再回到B状态。
注意: 影响倾斜的是加速度而不是速度
空中部分相对简单,B是跳跃动画原始状态,A是角色叠加了起跳前倾斜角度的状态,角色跳到空中会忽略空气阻力的话,在惯性作用下会保持着这个角度。
总而言之,倾斜叠加就是要在原始动画的基础上动态叠加出加速度以及惯性的感觉。虽然效果很细微,但是还是可以让动画更生动。
- 0. 效果演示
- 1. 概述与原理
- 2. 混合空间
- 3. 动画蓝图 事件图
- 3.1 总体流程
- 3.2 空中倾斜系数
- 3.2.1 Update in Air Values方法
- 3.2.2 Calculate in Air Lean Amount方法
- 3.3 地面倾斜系数
- 3.3.1 Update Movement Values方法
- 3.3.2 Calculate Relative Acceleration Amount方法
- 4. 动画蓝图 动画图
- 5. 动画曲线
倾斜效果是由预设的倾斜Pose通过ApplyAdditive运算,在Local Space上叠加到原始动画上实现的。因此,我们只要为地面和空中状态分别构造出一个如下的BlendSpace作为倾斜Pose,然后根据当前加速度或速度(惯性)计算出合适的FB(前后向轴系数-1到1)和 LR(左右向轴系数-1到1)。下文中我们会称由FB和LR构成的结构体LeanAmount为倾斜系数。
上面已经给出了混合空间的构造方法,需要注意的是其中每个动画片段的Additive Settings都要按照下图红框中设置。
注:本文是横板游戏实际上不需要LR向的倾斜Pose,不过既然ALS中有现成的素材,我也加进去了。
3. 动画蓝图 事件图 3.1 总体流程Update Animation方法
下面是ALS V4 中的Lean in Air Curve曲线,注意这个曲线的走向是自右向左的,因为下落过程中fallspeed值越来越小。
计算加速度向量和速度向量的数量积,数量积大于零为加速运动,反之为减速运动。我提供的工程是横版游戏,所以在计算相对加速度时和ALS V4原版有些区别。
下面是ALS V4原始版本中的Calculate Relative Acceleration Amount方法
在地面倾斜叠加的部分,还可以通过Weight_Gait 动画曲线控制当前动画对倾斜系数的响应大小
Run动画对倾斜系数Lean Amount最敏感,Weight_Gait 值为2。
Walk动画其次,Weight_Gait 值为1。
Idle时动画其次,Weight_Gait 值为0。