蒙太奇动画
在UE中可以使用蒙太奇动画完成一些效果,完成人物的一些特俗运动,比如攀爬、跳跃、技能等等。
使用蒙太奇的动画只需要创建一个蒙太奇动画,插入一个slot和section,便可以在动画蓝图涨使用,我们可以不关心蒙太奇动画的实现细节而达到很好的表现效果。
制作蒙太奇动画
首先选中一个动画,直接右键创建蒙太奇动画并命名,创建后可以发现动画蓝图中多了一个蒙太奇动画,这个动画就是我们的蒙太奇动画。
点击进入蒙太奇动画,可以在动画左侧看到Montage和Notifies两栏,Montage栏中可以新建slot以供我们使用,notifies栏中可以新建通知,通知可以让我们在动画播放时触发一些动作,比如播放声音、播放特效等等。
在montage栏中直接右键选择新建slot,并在DefaultGroup中选择新建的slot和section;notifies的操作与slot类似,创建好后可以拖动创建好的section和notify,在播放时选择section可以跳转到开始的区域(一个蒙太奇动画可以包含多个片段,可以使用section来控制播放哪个片段)。
在使用时只需要到动画蓝图中选择DefaultSlot,在细节面板中选择我们自己新建的slot,随后便可以在蓝图或C++中选择合适的时机播放蒙太奇动画。
至此就制作了一个简单的蒙太奇动画。
使用蒙太奇动画的简单例子
在角色的运动中我们实现了逻辑中的运动功能,还需要给角色添加动画,对于跳跃动画血药控制起跳、滞空、落地三个状态的动画,我们就可以使用蒙太奇与动画状态机来实现。
我们按照上述方法制作一个蒙太奇动画,其中包含了LightLanding和HevayLanding两个动画片段并给section分别起名为Light和Heavy,当角色落地速度不大时我们可以使用LightLanding片段,当角色落地速度较大时可以使用HeavyLanding片段。
在动画蓝图中新建一个状态机,在状态机中添加起跳和滞空动画,起跳动画完成后循环播放滞空动画,实现起跳与滞空功能。
当角色落地时,使用虚幻自带的OnMovementModeChange来控制播放蒙太奇,这个函数可以在C++中重写,或直接在蓝图中重新,两者只是参数上略有不同,在C++中只有PreMovementMode,蓝图中还包含了NewMovementMdoe(不算自定义),但对于实现落地没有什么区别。
以C++为例,在主角中添加
1 | public: |
并在cpp中添加实现
1 | void ACharacter::OnMovementModeChanged(EMovementMode PreMovementMode, uint8 PrevCustomMode) |
以上的只是伪代码,AnimInstance是动画实例,Montage是蒙太奇动画,FName是要播放的片段,Montage_Play是播放蒙太奇,Montage_JumpToSection是跳转到Light片段。
对于HeavyLanding可以添加一个bool来判断播放那个片段,可以检测角色滞空时的速度,当达到某一值时置为真,播放完蒙太奇动画后再置为假,就可以实现落地功能。
对于HeavyLanding,还可以添加两个动画通知,在开始时禁止角色运动,在片段播放完成后将MovementMode设置为Walking。
同时要调用RetsetJumpState函数,重置跳跃状态,否则角色会只跳跃一次。
完成以上操作便通过蒙太奇动画完成了跳跃功能。
混合动画
假如有两个动画,一个时角色的行走动画但是没有武器(一把手枪),另一个角色有持枪的待机动画,当我们需要角色的持枪行走动画时,就可以通过混合动画,使角色的上半身混合出持枪动作而下半身依旧是行走动画,这样就得到了一个持枪行走动画。
同样我们不关系混合动画的如何实现而只关心如何使用。
同样使用上面的例子,将两个动画拖入到动画蓝图中,使用LayerBlendperbone节点,以行走动画作为base,持枪动画作为blend。
在混合节点的细节面板中选择LayerSetup-BranchFitters-AddElements。BoneName使开始混合节点,BlendDethp为混合深度。BoneName是要混合的古河名称,Dethp表示混合深度,-1表示从该骨骼的父骨骼开始混合,1表示从子骨骼开始混合,0表示从该骨骼开始混合,同时也是默认设置。
我们选择Spine骨骼的位置开始混合并选择深度为0,Spine大概是胸部的位置,不同的动画可以选择不同骨骼以达到最好的效果。
完成以上操作后就可以得到一个持枪行走动画。
- 本文作者: KongXinQing
- 本文链接: https://13114987559.github.io/2023/09/19/essay/虚幻蒙太奇与混合动画/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!