一、动画蓝图
1.1 创建动画蓝图
动画蓝图 规范命名为 ABP_。
并选择合适的骨骼网格体。
1.2 动画蓝图组成
1.2.1 事件图表
- Event Blueprint Update Animation:动画蓝图的 Tick
- Try Get Pawn Owner:返回挂载 ABP 的 Pawn(需要 Cast To ***)
1.2.2 动画图表
1.3 混合空间(动画资产)
混合空间主要用于平滑地过渡和混合多个动画状态,以创建自然、流畅的动画过渡效果。
混合空间 规范命名为 BS_。
1.3.1 创建混合空间
并选择合适的骨骼网格体。
1.3.2 混合空间 1D 小案例
为了实现在锁定视角下角色在四个方向的移动动作,混合空间 1D 设置如下。
- Name:MoveDir
- 范围: -180° ~ 180°
- Grid Divisions:沿 x 轴划分 4 个网格
- Snap to Grid:吸附对齐
- 取样平滑 - Weight Speed:使动画过渡自然
其中,按住 Ctrl 并滑动鼠标可查看动画效果。
1.4 状态机
通过状态机,你可以创建各种 状态(State),定义要在这些状态中播放的动画,并创建各类 转换(Transition)来控制何时切换到其他状态。
1.4.1 创建状态机
在动画图表中通过 State Machine 节点创建。
1.4.2 状态机 小案例
在事件图表中编写逻辑。
Get Velocity:得到角色当前的世界速度向量(包括速度和方向)
Get Actor Rotation:得到角色本身的朝向(只关心 Yaw)
Calculate Direction:得到角色移动方向相对角色朝向的夹角
Is Falling:Character Movement 组件实时计算的布尔值。它在离开地面的瞬间就变成 True,触地瞬间变成 False。
创建状态机,同时我们还可以把我们创建的状态机保存起来。
在 MoveStateMachine 中添加状态、给状态添加动画、设置转换条件。
在给状态添加动画时,我们可以添加单个动画、混合空间等(这里状态机也可以,但注意状态机不是动画资产)。同时我们可以根据需求选择是否勾选 Loop Animation。
设置转换条件如下:
当 Speed > 0 时,由 Idle 切换到 Jog。
当 Speed = 0 时,由 Jog 切换到 Idle。
在 JumpStateMachine 中添加状态、给状态添加动画、设置转换条件。
设置转换条件如下:
当角色起跳时,Is Falling 为 True,由 Move 切换到 JumpStart。
JumpStart ——> JumpApex ——> JumpLand 无需设置转换条件,勾选自动播放即可。
当角色触地时,Is Falling 为 False,由 JumpLand 切换到 JumpEnd。
如果角色一落地就 Move,Speed > 0,这时不必傻等落地动画播完,条件立刻为 True,第一时间切回 Move,角色响应更跟手。
Time Remaining:当前动画资产剩余秒数。
Time Remaining(ratio):当前动画资产剩余百分比。
当 Time Remaining < 0.2 时,即使玩家落地后一动不动,只要动画播到尾巴,条件就为 True,保证一定能回到 Move。
如果角色刚触地又起跳,此时 Is Falling 又为 True。由 JumpEnd 切换到 JumpStart。