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
当前状态是什么相对应去切换状态机中的状态。
类图

时序图
