- Home /
Is it possible to flush animation sampling?
I'm writing some code that relies on doing some analysis of some AnimationClips during startup, however it seems that any calls to GameObject.SampleAnimation() actually result in some sort of deferred updates to the Transforms involved in the animation.
That is, I can't just write a loop similar to this:
for (var i = 0; i < sampleCount; ++i)
{
gameObject.SampleAnimation(clip, i/clip.frameRate);
Debug.Log(transformInAnimation.position.y);
}
Because, despite that transformInAnimation is actually moved as a result of clip, the movement doesn't happen until some point later in time (presumably the end of the frame?), so the Debug.Log() calls just show the same value repeatedly.
I've confirmed this by putting the above code (slightly modified) into a coroutine that only calls GameObject.SampleAnimation() once per frame, and the Debug.Log() calls give the output I would expect: different values for transformInAnimation.position.y, as it animates around according to the sampling.
For the purposes of animation analysis it's absolutely ridiculous to need to wait a frame just to get a proper sampling of the animation, so I ask this: Is it possible to flush the animation sampling so that the Transforms are properly updated and can have their values used in code immediately following, instead of waiting for the next frame?
If this is not possible, I fear that I must resort to writing some Editor code that we'll need to run any time an animation is updated, that'll just flip thru every frame of an animation and analyze it, but that's going to be significantly more work, waste time for the animator, and be prone to human error when the animator forgets to run the script... >_>
Your answer
Follow this Question
Related Questions
Lipsync with phonem animations? 0 Answers
Animation Continue 0 Answers
code using lerp with input 2 Answers
Add mixing transform to some parent transforms but not specific children? 0 Answers