Description

The anim mixer's skeletal animation eval task suppresses an anim sequence's Force Root Lock during pose evaluation so the root-motion extraction task (FAnimNextExtractRootMotionTask) can measure and apply root motion itself. This path is taken for anims with both Force Root Lock and Enable Root Motion driven through the mixer.

The suppression relies on FAnimExtractContext::bIgnoreRootLock, which is WITH_EDITOR-only, so the suppress in FMovieSceneSkeletalAnimationEvaluationTask::Execute is gated behind #if WITH_EDITOR. As a result the mixer's root-motion pipeline behaves differently between editor/PIE and cooked:

  • Editor/PIE: the lock is suppressed during eval, real root motion survives, and the extraction task handles locking.
  • Cooked: the field does not exist, so the lock is applied during decompression and the extraction task works from an already-locked pose.

This is a runtime system depending on an editor-only lever, so the behavior silently forks between configs.

Repro

  • Set up an anim mixer skeletal section using an anim sequence with both Force Root Lock and Enable Root Motion enabled.
  • Compare root behavior in PIE vs a cooked/packaged build.

Proposed fix

  • Add a runtime (non-WITH_EDITOR) bool to FAnimExtractContext (e.g. bSuppressForceRootLock), separate from the editor-only bIgnoreRootLock so the preview flag's meaning is unchanged.
  • Un-gate the three force-root-lock checks (!ExtractionContext.bIgnoreRootLock) currently under #if WITH_EDITOR so they honor the new runtime flag in cooked.
  • Set the new flag unconditionally in the mixer eval task and drop its #if WITH_EDITOR guard.
  • Default the flag to false so all other runtime paths are byte-for-byte unchanged.
  • Add a mixer test comparing a Force-Root-Lock + Enable-Root-Motion section cooked vs PIE.

Key locations

  • MovieSceneMixedSkeletalAnimationSystem.cpp (section flag derivation, and the #if WITH_EDITOR suppress in the eval task)
  • AnimationAsset.h (FAnimExtractContext::bIgnoreRootLock)
  • DecompressionTools.cpp, AnimSequence.cpp, AnimStreamable.cpp (the #if WITH_EDITOR !bIgnoreRootLock force-root-lock sites)

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-386453 in the post.

1
Login to Vote

Unresolved
ComponentUE - Anim - Sequencer
Target Fix43.00
CreatedJul 13, 2026
UpdatedJul 22, 2026
View Jira Issue