如何让模型在UE4的Sequence中叠加表情动画

1,696 阅读2分钟

最近有个需求是过场动画中的角色需要在播放其他动作的同时叠加上表情动画,并且叠加表情动画的功能需要独立,以备其他功能在蓝图或CPP中调用。

首先需要让播放表情的功能独立,在动画状态机中定义两个字段:

表示是否播放表情以及播放哪种表情动画,记得加上Interp,这样Sequence中才可以找到这俩字段。

接下来打开角色的动画状态机,添加Animation Layers:

这里BaseLayer是角色自身主要的动作状态机(走跑跳等),FaceLayer负责表情动画,LayerBlending是把其他层进行混合。

下面我们看下FaceLayer层中的内容:

这里就是根据前面定义的EmotionType枚举值去混合不同的表情动画,动画名字后面带additive表示该动画是个叠加动画,如果没有additive字样,需要到动画文件中修改AdditiveAnimType类型为Local Space,这样在混合动画时,就会把表情对应的矩阵数据叠加到角色上。

然后是LayerBlending层中的内容:

同样,这里是根据前面定义的bPlayingEmotion布尔值来充当表情动画的开关,开关开启时角色播放基础动作加上表情动画,开关关闭时角色只播放基础动作。BaseLayerInput是BaseLayer的结果,FaceLayerInput是FaceLayer的结果。

叠加表情动画这里还需要在Animation Layers中操作下连接:

至此,叠加表情动画这一部分已经完成,现在我们可以在蓝图或CPP中,通过设置bPlayingEmotion字段值来操作播放/不播放表情动画,通过设置EmotionType字段值来决定播放的具体是哪个表情。

最后就是Sequence中如何配置才能使用上面做好的叠加表情功能,如图:

这样通过在时间轴上修改两个字段的值,就可以控制BP_xxx这个模型在播放休闲动作的同时叠加上表情动画,并且可以在编辑器的Cinematic视口预览(事件轨道方式无法在编辑器预览)。

按道理,美术同学可以直接出带表情的休闲动作,然后使用Animation轨道直接播放,但是走跑跳等动作全部独立做的工作量巨大,所以项目中如果包含较多带表情的过场动画,可以考虑使用这个方案。