Animation State Machine For Gameplay
April 21, 2025About 2 min
Animation State Machine For Gameplay
在做玩法时,经常会有一个需求根据角色当前的播的动画触发一些特殊规则。
比如角色在待机状态下和行走状态下他的相机的FOV不同,最先想到的使用动画通知来制作该需求,在两个动画中配置对应的FOV设置再应用即可。如果这样的需求多起来,就会有很多动画通知。
那如果想要做变化值的插值、或者处于该动画时,需要实时检查一些东西、该动画结束后需要做一些操作。这样自然就会想到把播放该动画作为一个状态。
正常来说角色的locomotion是使用的动画蓝图中的状态机来实现,那可以将这个状态机作为基础,对动画中的状态添加一个对应控制Gameplay的状态。
如何使用
这里使用官方的Mannequins资源包中的ABP_Manny作为例子:

这里有两个状态机:
- Main States

- Locomotion

每个状态机都可以对应一个AnimStateMachine,每个状态都可以对应一个AnimState。当然也可以不一一对应。
创建对应状态机步骤:
- 创建
AnimStateMachineContainer
- 将
AnimStateMachineContainer配置到AnimInsatance
- 创建
Locomotion状态和状态机
- 配置状态

- 创建
Main States状态和状态机
- 配置状态

Warning
值得注意的是:AnimState中的StateName需要和AnimInstance中的状态名字一模一样。同理AnimStateMachine的MachineName也必须和AnimInstance中的状态机名字一模一样。
实现
核心逻辑:监听动画蓝图中的FAnimNode_StateMachine信息,通过状态的名字来链接到Gameplay的状态。由动画蓝图的NativePostEvaluateAnimation方法来驱动状态机更新,更新状态是通过获取FAnimNode_StateMachine当前状态是什么相对应去切换状态机中的状态。
类图

时序图
