动画通知 (通知)

动画通知(简称AnimNotifies或通知)使得动画相关的程序员可以设置在动画序列的特定点处发生的事件。通知通常用于这样的特效,比如走动时的脚步声、跑动动画或在动画中产生一个粒子特效。然而,它有很多种不同的用途,因为您可以使用自定义的通知类型来扩展该系统,从而满足任何类型游戏的需求。

创建及编辑通知

通过使用角色编辑器中的通知编辑器 ,您可以创建及编辑通知。

通知类型

不同类型的通知会触发不同的事件。相机特效、粒子特效、声效等,都可以在动画过程中的任何特定点进行触发。以下是当前可用的通知。

播放粒子特效

Play Particle Effect(播放粒子特效)通知可以在动画时间轴的特定处在给定的插槽位置上产生及播放粒子特效。该通知对于类似这样的特效是有用的,比如当玩家移动时在玩家脚部呈现大量的灰尘、当玩家使用Nitro-Boost增强型道具时从排气管中喷出火焰、及其他类似特效。

PlayParticleEffectNotify.png

Play Particle Effect(播放粒子特效)通知没有使用动画蓝图来控制行为。而是使用详细信息面板中定义的几个简单的属性来确定所使用的的粒子系统、及产生粒子的插槽。

PlayParticleEffectDetails.png

属性 描述
PSTemplate 该项存放了要在通知的设定点处即时生成的粒子系统。
Socket Name(插槽名称) 该项包含了将用作为粒子系统的产生点的骨架网格物体插槽。
Notify Color(通知颜色) 修改该通知在通知条上的颜色。

一旦设置,将使用插槽位置作为产生点来播放相关的粒子系统。

DustyFeet.png

播放声效

Play Sound(播放声效) 通知提供了一种让您的声效和动画同步的简单方法。和 播放粒子特效 通知类似,这个通知在详细信息面板中也有几个可以设置的简单属性, 它对于类似这样的东西是有用的,比如机器人移动时机械之间发出的呼呼声、角色运动时布料的沙沙声等类似特效。

PlaySound.png

播放声效通知使用详细信息面板中定义的几个简单的属性来确定所使用的声效、及发出该声效的插槽或骨骼。

PlaySoundDetails.png

属性 描述
Volume Multiplier(音量乘数) 这是声效音量的缩放因数。
Pitch Multiplier(音高乘数) 这是声效音高的缩放因数。
Follow(跟随) 如果选中该项,该声效源将会跟随静态网格物体移动。如果未选中该项,那么声效仍然会在后面,即在它的产生位置处。
Attach Name(附加名称) 这包含了将用作声效产生点的骨架网格物体插槽或骨骼。
Notify Color(通知颜色) 修改该通知在通知条上的颜色。

自定义

Custom(自定义) 通知适合于美工人员想在动画的某个特定点处在 动画蓝图 中完成的任何内容。通过右击一个通知轨迹并从关联菜单中选择 新建通知 ,您便可以创建自定义通知。

MySpecialNotify.png

您一执行完这个操作,就会要求您提供这个新通知的名称。

NotifyName.png

输入名称后,您将看到新的通知出现在时间轴上。

MyNotifyIn.png

自定义通知在详细信息面板中没有任何要编辑的属性。然而,它们允许您在 事件图表 或该骨架网格物体的动画蓝图的状态机内的 Transitions(变换) 中创建通知事件。

SwitchToAnimBP.png

在事件图表中的任何地方 右击 ,会有一个用于添加动画通知事件的部分。

rightClickAddNotify.png

MySpecialNotifyBlueprint.png

动画通知状态 (AnimNotifyState)

AnimNotifyStates (通知状态) 和上面的单一性通知类似,不过它们有三个不同的事件: 开始事件,更新及结束事件。开始事件和结束事件非常容易理解,当动画中的时间点到了时,触发这是事件中的事件图表。更新事件会触发每次动画更新,直到遇到结束事件为止。它和单一性触发通知的主要区别是 AnimNotifyStates 是自包含的 蓝图

要想使用 AnimNotifyState :

  1. 通过创建一个继承 AnimNotifyState 的新蓝图,可以在内容浏览器中创建一个新的 AnimNotifyState 资源。

    newBP.png

    AnimNotifyStateCreate.png

  2. 动画序列动画蒙太奇 上,您可以右击通知区域并添加您的新 AnimNoitfyState

    addNotifyState.png

  3. 您可以通过右击 AnimNotifyState 并选择 Set AnimNotifyState Duration(设置动画通知状态持续时间) 来设置它的长度。

    AnimNotifyStateSetLength.png

    duration.png

  4. 最后,从 内容浏览器 中,双击您的 AnimNotifyState 来调出它的蓝图,以便您可以开始定义它所执行的动作。

现在,您可以开始实现 AnimNotifyState 的三个函数了。虽然不是必须实现每个函数,但您至少应该实现 Recieved_NotifyTick 函数,或实现 Recieved_NotifyStartRecieved_NotifyEnd 这两个函数。如果仅实现了 Recieved_NotifyStartRecieved_NotifyEnd,那么您可以简单地使用一个标准的动画通知。

Recieved_NotifyStart.png

Recieved_NotifyEnd.png

Recieved_NotifyTick.png

引脚 描述
Mesh Comp(网格物体组件) 这是骨架动画序列或蒙太奇的网格物体组件,用于触发这个AnimNotifyState。
Anim Seq(动画序列) 这是触发该AnimNotifyState的特定动画序列。
Frame Delta Time(帧间隔时间) 仅在Received Notify Tick函数中有这个引脚,这为您提供了自从上一次动画更新后过去的时间。

目前还没有办法在蓝图中获得 AnimNotifyState 的长度。

规则

  • 您必须确保以NotifyBegin 事件开始。

  • 您必须确保以NotifyEnd 事件结束。

  • 您必须确保NotifyTick连接在NotifyBegin和NotifyEnd事件之间。

  • 不能确保不同动画通知(正常通知或状态通知)之间的顺序! 如果您把两个AnimNotifyStates彼此相邻放置,并不能确保第一个通知在第二个通知开始之前结束。这仅用于不需依赖其他通知的单独动作。

  • 支持负播放速率。不管怎样,NotifyBegin仍然称为第一个事件,NotifyEnd称为最后一个事件。

顺序和逻辑

当触发 AnimNotifyState 时,首先会调用 Start 蓝图,然后在同一帧更新上调用 Tick 蓝图。在后续的每次 tick(更新) 中,将仅会调用 Tick 蓝图。在最后一次 tick(更新) 上,将会调用完 End 蓝图之后调用 Tick 蓝图。

实际上,如果您正在每帧修改一些东西,那么应该在 Tick 蓝图中进行处理。如果您需要在触发ticks(更新)之前设置变量、标志或属性的值,那么您应该在 Start 蓝图中处理。最后,在最后一次 ticks(更新)触发之后,可以使用 End 蓝图来修改变量、标志或属性。