本笔记的记录了动画蒙太奇的用法。入门示例成品。
如果所有动画都按动画状态机的方式来执行,会比较不灵活。那么可以用动画蒙太奇,来指定要播放的动画直接进行播放。
创建蒙太奇
右键创建蒙太奇。这里新建的蒙太奇命名为“AM_Attack”。
编辑蒙太奇。
首先打开必须几个窗口,打开窗口菜单,保证“资产详情”、“资产浏览器”、“动画插槽管理”、“蒙太奇片段”已经是打开的状态。
编辑插槽
新建插槽(Slot)。这里新建的插槽叫“Attack”。
设置插槽。设置为刚才新建的“Attack”。
编辑蒙太奇片段
将动画拖入蒙太奇时间轴里,以备编辑。
新建片段。在蒙太奇时间轴里点击右键,新建片段,并给片段命名,该命名可以在程序中调用,指定播放哪个片段的动画。这里新建的片段简单命名为“1”。
删除默认的片段“Default”。在片段名上点击右键,选择“删除蒙太奇片段”。
编辑蒙太奇片段的开始时间。拖动下图中标记的蒙太奇片段开始时间线,标记该片段的开始时间点。
蒙太奇片段窗口里,断开片段的链接。点击连接的那个箭头即可弹出如下图所示弹窗。
断开后的片段如下图所示,点击“预览”可以看对应的片段的播放情况。
编辑通知
动画蒙太奇的通知类似Unity里的动画事件,在对应通知轴里点击右键,添加通知即可。如下图所示,系统默认提供了一些通知,例如“播放音效”、“播放粒子效果”等。这里我们需要在动画结束时候做一些事,那么我们选择“新建通知”。新建的通知,在动画蓝图里可以访问到和通知同名的事件。具体实现内容可以到动画蓝图里实现。
这里我们新建的通知名称为“OnAttackAnimEnd”,在动画蓝图中访问该通知/蓝图事件如下图。
应用蒙太奇插槽
打开动画蓝图的AnimGraph面板,新建插槽,并将插槽连接到状态机和输出姿势之间。相当于用动画蒙太奇拦截了状态机的输出,将蒙太奇的输出当作姿势的最终输出,来播放动画。默认的是“Default”插槽,可以到“细节”窗口去修改为“Attack”插槽。
代码播放片段
角色类里面新增字段,用以保存动画蒙太奇实例的指针。
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation")
class UAnimMontage* AnimMontage;
在角色蓝图类里面将刚才创建的动画蒙太奇赋值给上面的指针。
播放蒙太奇可以调用如下接口:
// AnimMontage:传入蒙太奇指针。
// InPlayRate:播放速率。
// StartSectionName:蒙太奇片段名称。
float ACharacter::PlayAnimMontage(class UAnimMontage* AnimMontage, float InPlayRate, FName StartSectionName)