Rootmotion in UE5 not gouing in straight line

Hi, friends. During my development today i met with Very strange problem that i can’t figure out myself. (i think it’s ue5 unknown bug or something like that)
Let me explain problem from the beginning.
Here i have ladder:
image

it is procedural and there is nothing special about it. Don’t mind curve it dosen’t affect mesh positions because sections are generated in classic way:


curve is used for it’s function “Find Input key closest to world location”.
I also made some code to start climbing that ladder. In that code i transfer character movement mode to flying. And some animations + animbp setup.
Here it is inside:

and

As you see from the screens i used rootmotion to move my character along the ladder’s surface.
Inside of the climbing mechanic i also have code that rotates character along ladder.
And system works very well. As i expected.
image

But. If i climb along ladder on very high length see what happens:

Pay attention for this corner:
image

And here, after few steps:
image

Somehow, with rootmotion bug i think, character moves into bottom-left corner.
Ladder rotation is this:
image

For the ladder animation i use Auto Rig Pro addon and this setup in the Blender 3:
image

Root bone has this transforms:


and
image

Root bone interpolation is Linear. Hands, pelvis and legs ik interpolation are linear.

I almost 100% sure it’s not Blender’s but, it’s ue5 bug.
I have some ideas about fixing this problem using Tick. But anyway decided to report it here. Maybe some of you solved something like this before? Any Suggestions?

hmm i removed rootmotion movement from the project and now … leg offset problem is solved but there is anoter one.
Leg sliding.
image
My animation is designed for speed - 0.7 meters per second.
Ue5 plays in one second 30 frames of animation that means we move 70 centimeters per second. This value is put into flight speed:
image
Ladder in Blender has some height


since it’s mirrored we need to multiply it by 2 and convert into centimeters to get:
image
All values are match together. And when we start climb everything is fine:
image
But once we start movement this happens:
image
So somehow fly Up Speed is higher than 70 centimeters per second. Why?
I should say that i already did this:
image
But that don’t help.
If i put Fly speed to 60 everything start to work a better:

Almost better. So somehow fly up speed on character movement component is faster than “max fly speed” to 10 units ± (only god knows exact number)
… well. ofcourse i will figure it out experimentally but… this is really problem.
I calculated it and it’s value is 61.6 centimeters per second.
image

Can anyone please explain me why this is happen? Why Max Fly Speed dosen’t met with exact value that is set inside character movement component?

ok… i guess if i started this topic i should continue … solving it. During my entire last day i tryed to solve this problem. And after a lot of experiments i come to this:
yes, actual Max Fly Speed is lover that Max Fly Speed you set in Character Movement Component.
It vas visible on the animation, if you read my last message. But i did not believed that because it’s bugged only with fly mode. In walk mode with or without rootmotion there is no sliding at all (or i don’t see any). Only with fly i have this problem.
I recreated all ladder climbing animations and the ladder itself in hope that problem is not in unreal engine. That did not helped.
So now my ladder climb animation designed for speed 72 centimeters per secdond exactly.
And my ladder section is 36 centimeters in length which can be simply calcylated by dividing 72 to 2. Why climb animation has 72 centimeters speed? Because one climb animation takes us to two ladder steps upper. This two steps each are 36 centimeters long.
Now i inserted this speed into fly speed.
image

But even after recreating animations and reentering values i still see the same bug with ladder step desync. There you go:
image

So i made this code to be sure that i am not wrong:

What it does? Eevery one second it just takes current character location and gets it’s delta with previous location.
Every second. So this allows us to track character location change in centimeters/second in print log.
And here what i see:

70 centimeters per second. Not 72. This is why animation leg steps are desync from the ladder steps. Why is that? My Max Fly Speed is 72. And yet, inside of the game, it is not 72 at all.
Ok how i can solve this? Ofc i should increase this initial 72 to 2 and get 74, hopefully this will remove speed bug.
So after setting max fly speed to 74:
image
I got this in log:


It’s 72 finally! And there is no desyncronisation, as you can see.
So… well.
And now i think i can fix it.

well… that’s very strange but this two almost similar types of logic give different results.
first type of logic -


and it’s result
image
second type of logic -

all what i did is moved the delay
image
but now result is very different.
I can’t underestand it.

ok, problem is solved. I just hard-locked my character X axis to the ladder in tick.


And returned to rootmotion-based concept. Hope my work will go well now.