Search Issue Tracker
By Design
Votes
0
Found in [Package]
1.0.3
Issue ID
1310326
Regression
No
Abrupt offset in the Root Motion when using AnimationPlayableUtilities.Play() in comparison to manually updating PlayableGraph
Reproduction steps:
1. Open user's project "animation-root-glitch.zip"
2. Open "SampleScene" Scene
3. Enter Play Mode
4. Notice how the Root Motion indicator (trail of green dots) breaks when transitioning from one AnimationClipPlayable to another
5. Exit Play Mode
6. Change "PlayableTest.cs" script in Assets/Scripts with the one attached by the user "PlayerTestManual.cs"
7. Enter Play Mode again
Expected result: Root Motion is smooth when transitioning from one AnimationClipPlayable to another when updating PlayableGraph manually and also when using AnimationPlayableUtilities.Play()
Actual result: Root Motion is smooth only when the user manually updates PlayableGraph inside Update(), and it has abrupt offsets/shifts when using AnimationPlayableUtilities.Play() instead
Reproducible with: Animation Rigging 0.2.7-preview (2019.4.19f1), Animation Rigging 1.0.3 (2020.2.3f1, 2021.1.0b5, 2021.2.0a3)
Could not test with: 2018.4.31f1 (no Animation Rigging functionality)
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
- [Remote Config] PreparePayloadWithConfigType function is looking for camelCase property names, when the JSON objects are using PascalCase naming
- UI Builder Viewport's Tool Gizmo has deadzones
- SpriteShapes are rendered using multiple draw calls when the SRP Batcher determines their nodes are incompatible in a specific project
- UI Toolkit Debugger "Pick Element" selects Scene view panel when trying to select a world space UI element in the Scene view
- MSAA warnings are thrown when custom post-processing is used and the Scene contains transparent GameObjects
Resolution Note:
This is by design.
When using humanoid, a pivot management calculation is made, which is why an offset is added when the humanoid changes clip in the current case.
The reason the offset is not added when setting the time manually, is that the user didn't use the full playable graph functionality. He sets the time of the animationClips playable manually instead of calling PlayableGraph.Evaluate(float deltaTime). If he did use the latter way of updating the time manually, the offset would apply as well.
Some possible workarounds :
- don't use humanoids : humanoids does sensible things with sensible data. If some of those calculations are not wanted, it might be better to use Generics instead of humanoids
- Keep the workaround where the user updated the time of AnimationClipPlayables manually
- Synchronize the clips better, so that when changing from one clip to another, the offset is not as big