If you have that many transitions you are “doing it wrong” anyway.
You wont really find this out from docs or tutorials, but you can and should swap ABP at runtime to introduce different behaviours.
Now with that in mind.
What is root motion in practice?
Animating the position of the root bone (armature in blender) causes the motion to carry over in engine.
So lets say I have a walking forward animation that covers 10m in 3 steps.
If I play it, the character will move 3 meters exactly.
Now lets say thay the character moves at a non linear pace - like hopping on a leg.
The animation still covers 10m in 3 steps, but the speed at which the root bone moves is not constant. Lets say theres a 2s pauase at 5m and then continues.
Based solely on this:
How do you remove the motion of the root to get an in-place animation but maintain the speed in engine?
Rather Simple:
You save the position of the root to an animation curve, and you use the animation curve to alter the character’s walking speed.
(Note that you need to convert it to speed or normalize it in a 0 to 1 range to do it in engine).
Now given that, you should probably go ahead and re-do your animation setup so that it isn’t quite so convoluted. And replace the animation from root motion to in place - which can also be replicated on the network as opposed to root motion.
Ps:
With root motion driven animation even a slight rotation of the root could cause the movement to appear to step forward/backwards.
Always forward if you mirrored or -1 an animation to obtain the opposite side when talking of left to right.
Since you probably have to correct the animations anyway in order to zero out root rotation, you may as well process them to be in place and keep/copy the X or Y position of the motion as a curve to utilize as a varying speed…