The movement I get from an animation with root motion is too large


My character has a roll animation, which makes him go forward by about 4.4 meters (both in Blender and the animation preview in UE). But when I’m doing a roll in game (via the PlayMontage node), the character ends up 8.8 meters away from its start position.

Here is my setup:

  • the roll animation is imported from a FBX file exported from Blender. The distance looks fine there. Root motion is enabled on the animation.

  • the animation is used (alone) in a montage (to be able to get notifications), where everything is assigned to the default slot.

  • the animation blueprint currently outputs whatever comes out of a 2D blend space containing the movement animations, also in the default slot. Root motion is enabled from montages only.

  • when the roll button is pressed, a Gameplay Ability is started. This ability uses a PlayMontageAndWait node to start the roll montage. My understanding is that since the same slot is used, the output of the animation blueprint is overridden by the montage until it ends.

Everything seems to work fine, using this system my character can move, roll and attack. But the rolls seemed odd, and it turns out (when measuring the distance) it is two times bigger than expected (regardless of if the character was moving or not, it doesn’t seem to affect the distance).

Does someone has an idea?

And semi-related question: it feels odd to have an almost empty animation blueprint and to start montages from other parts of the code. It does seem way easier that way though (using gameplay abilities). Am I missing something?

I found the bug. As expected, it was something stupid, and right in the middle of a blueprint I looked at 1000 times: the PlayMontageAndWait node has a “Anim Root Motion Translation Scale” input, which was set to 2.0 (and I can’t remember why of course…).