Search Issue Tracker
By Design
Votes
1
Found in
2017.4.0f1
2017.4.28f1
2018.3.0a1
2019.1.0a1
2019.2.0a1
2019.3.0a1
Issue ID
1172293
Regression
No
HumanPose.bodyPosition accumulates error when Humanoid model is moving by using Root Motion animation
How to reproduce:
1. Open the attached project("TestHumanPosition")
2. Enter Play Mode
Expected result: the red sphere keeps up with the Humanoid model
Actual result: the red sphere lags behind the Humanoid model
Reproducible with: 2017.4.31f1, 2018.4.5f1, 2019.1.13f1, 2019.2.0f1, 2019.3.0a11
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Texture2D hash changes inside of an AssetBundle when rebuilding a SpriteAtlas bundle with an empty AssetPostprocessor Script enabled
- Aniso Level still applies when Generate MipMap is disabled in Texture Import Settings
- Mipmap Limit Groups long names are not truncated when creating a new Mipmap Limit Group with a long name
- “ArgumentException: Invalid double parameter.” error is thrown when Infinity is typed into the Fixed Timestep field
- GameObject becomes gray when using HDRP and STP together on macOS
Resolution Note:
The HumanPose is actually working as intended :
When calling HumanPoseHandler.GetHumanPose(ref humanPose), humanPose.bodyPosition is the global position of the center of mass of the character divided by the avatar human scale (it's a "normalized" position, so to speak).
To have perfectly matching positions in the provided project, all is needed is to mulitply the bodyPosition by the avatar human scale. i.e. replace
debugSphereHumanPose.position = pose.bodyPosition;
by
debugSphereHumanPose.position = pose.bodyPosition * animator.humanScale;
Unfortunately, the computation of bodyPosition is currently poorly documented in the API documentation, I have currently a local change that will improve this documentation.