We’re experiencing a strange issue with an animated character within Unity and are hoping to gleam some information or get some advice on what might be wrong with our files.
The character has been animated with root motion in mind. It has a root bone between its feet at 0,0,0 and this bone translates along with the character during the animations.
What’s strange is that the root transform gizmo within the animation inspector does not follow along with the movement of the root bone. It just sits at 0,0,0.
When we turn on “Loop Pose” we do see that the character no longer walks on a line, but now starts to animate in-place. This is what would be expected of root motion behavior, no?
We’re also seeing the inspector reporting back an average velocity and it is above zero.
The question is, is that root transform supposed to follow with the character in the inspector and if it does NOT, does that mean that root motion isn’t working?
In the end, the last question is surely “how can we fix this?”.
Any help would be highly appreciated.
Thanks for your time.
[Further Study] Some of the tests we’ve ran only confuse us further.
We imported the animations into 3DS Max and into Maya and both show the root bone translating. We don’t know how to confirm root translation at a more raw level than this.
We imported the whole character into Unreal Engine 4 and it too shows the root bone translating, however its method of root motion works fine and there’s no glitches at all.
Clarification here might help lead to a solution.
This is worded oddly. Usually this would be described as the root moves the character, instead of the root moves ‘with’ the character.
Is the root bone the root of the character hierarchy?
There is no other bone or object that is a parent of the root, such as a null,dummy,spline,game object - not part of the skin definition?
Is the root bone defined in Unity the actual root bone of the character hierarchy? Instead of a null parented to the root or the hips or some other bone.
These questions also seem like silly questions - similar to the first question asked.
theANIMATOR2b makes an excellent point. When you say that the bone translates along with the character during animations, is that to say that the bone moves with the character? Or the character is moved BY the bone. This is a very crucial difference. Typically the hip joint is the highest skinned joint in the hierarchy and the root is just above the hip. The root is the bone that has the motion for the rig as the character translates in space. That it is at 000 is inconsequential so long as it’s trajectory over time describes the movement of the character in relation to a perceived traction of the feet on the ground.
Thanks for the response guys. These questions aren’t silly. Anything that helps us investigate a different approach to solving it is valuable to us. We do actually have a lot of experience putting characters into various engines. We’re on this thread because this is an anomally that we don’t understand. We don’t even truly know if it’s broken in Unity.
Here’s some more information.
The character is moved BY the bone, the root bone.
Directly parented to the root bone, which in our case is named “joint1”, is the Hip Joint. “joint1” is the root of the entire heirarchy and it is the only root.
Moving joint1 does take the entire skeleton with it and the movement track is on this bone and not the hip joint. If we remove the keyframes for joint1, then the character walks in place.
Either way, what we see in the inspector is the character walk on a line and then loop back to the origin. The circle shaped gizmo that represents the root transform in the inspector, however, is the only misbehaving part and we’re really unsure if it matters. It stays at the origin no matter what the animations are doing, which is moving the root bone all over the place.