- 什么是动画通知状态(Anim Notify State)
- 使用情景
- 动画通知状态的使用方法
- 定义动画状态通知
- 绑定(注册)动画通知状态
先说说名字,动画通知状态听起来好像是一种状态,但实际上也是一种动画通知,所以,老王觉得翻译成“动画状态通知”也许更恰当。
如果你理解了老王前面介绍过的动画通知(见《UE4动画系统:什么是动画通知(Anim Notify)》),那么动画通知状态也不难理解了。二者都是动画调用游戏逻辑的机制,动画通知对应动画时间轴上的一个时间点,而动画通知状态对应动画时间轴上的一个时间段。
使用情景举个格斗游戏的例子吧,假设我们用一个动画序列表现角色的酷炫超必杀,而角色做这个超必杀时 其攻击力和防御力被设计为以某种曲线波动的。
在整个释放必杀技的过程中甚至还有防御力为零的时刻(这种设计可以让水平高的玩家在最危险的时刻抓住机会反击,提高游戏的刺激感)。要满足这种需求,使用动画通知状态会是一个不错的选择。
动画通知状态的使用方法动画通知状态,无法像动画通知那样直接在动画时间轴上创建
那咱们就派生一个
AnimNotifyState
可以override的4个方法
和动画通知相比,多了Received Notify Begin
、Received Notify End
以及Received Notify Tick
三个方法正好对应着状态机中每个状态的常用方法
GetNotifyName
:定义了这个动画通知状态在时间轴上显示的名称。和之前的动画通知一样。
本例中我把显示名设为"My Notify State"
Received Notify Begin
:开始播放这个时间段(上面说过,动画通知状态对应的是时间段)的动画时就会触发这个事件。
Mesh Comp
网格组件对象Animation
动画实例对象Total Duration
:时间段的总时长
Received Notify End
:结束播放这个时间段的动画时就会触发这个事件。
Mesh Comp
网格组件对象Animation
动画实例对象
Received Notify Tick
:播放这个时间段的动画时每一帧都会触发这个事件
Mesh Comp
:网格组件对象Animation
:动画实例对象Frame Delta Time
:与上一帧的间隔时间
接下来我们就可以在动画时间轴上添加刚定义的动画通知状态,然后我们不仅可以调整它的位置,还可以调整它的长度。之前说过,动画通知状态对应的是时间段嘛。