蓝图设置方式

Root Motion 设置步骤:

  1. 先在 AnimSequence 的Asset Detail面板中勾选EnableRootMotionForce Root Lock
  2. 然后基于该 AnimSequence 新建一个 AnimMontage。
  3. 然后再在 AnimationBluerpint 中设置Root Motion ModeRoot Motion From Montages Only(Class Defaults 面板下,不是Class Settings)。

如果你没有使用UE4的服务器、或者使用了UE4服务器但是没有对动画启用Replication(服务端通过 NetMulticast 播放动画),设置为Root Motion from Enerything没有问题,如果使用了UE4的Replication,且这些动画文件(AnimSequence, Blendspace, AnimMontage, etc.)勾选了EnableRootMotion,那么 Root Motion 也会被同步,影响性能。所以官方文档上的建议是使用默认设置,即:Root Motion Mode设置为Root Motion From Montages Only,只对Montage的Root Motion进行Replication。

Root Motion
https://docs.unrealengine.com/en-US/Engine/Animation/RootMotion

C++设置方式
  • v4.5之前的方式: UAnimMontage 的两个属性 bEnableRootMotionTranslationbEnableRootMotionRotation,任意一个设置为 true 即可。
    AnimMontage.cpp 引擎代码:

    bool bRootMotionEnabled = bEnableRootMotionTranslation || bEnableRootMotionRotation;
    
    if (bRootMotionEnabled)
    {
        for (FSlotAnimationTrack& Slot : SlotAnimTracks)
        {
            for (FAnimSegment& Segment : Slot.AnimTrack.AnimSegments)
            {
                if (Segment.AnimReference)
                {
                    Segment.AnimReference->EnableRootMotionSettingFromMontage(true, RootMotionRootLock);
                }
            }
        }
    }
    
  • v4.5的新方式:

    UAnimSequence::bEnableRootMotion = true;
    
Blend Animation时动画卡顿

播放Montage时,如果角色可能正在发生位移,那么对应的AnimSequence需要禁用RootMotion,否则角色移动过程中,如果正在混合Montage,会导致角色动画卡顿。


什么是最困难的?与生活讲和。 ──米奇·阿尔博姆(MitchAlbom)《相约星期二》