Put simply, RootMotion is driving the character's transform via animation. [ref]
Usually, we use scripts to move characters or use physx to push them around. However if there's some animation with big translation offset, it could cause the logic position and visual position to differ greatly.
RootMotion would use the animation's data to drive the character's logic position, hence keep the logic position in sync with the visual position.
Of course, everything has its own pro and cons. For example, you might have to pay extra effort to debug the control transition between script/physx/rootmotion.
There're many methods to make RootMotion in Unity. For example you could script RootMotion for "in-place" animations [ref]
Here we would show you:
1. How to make RootMotion for Generic-rig models with AnimationView;
2. How to make RootMotion for Humanoid-rig models with DAE Exporter;
The detailed steps are recorded in the video tutorial below:
It's also a common use-case that people might need to preserve the RootMotion data when convert Muscle-Clip to Generic-clip.
This video shows how to do it:
NOTE1: Be sure to set the "Root Motion Node" to "<Root Transform>", or else the Root Motion might have some weird behaviour;
NOTE2: If you're working on RootMotion for generic animation, be sure to set the RootNode to <None>