I am creating a coroutine where I am detecting if the animator state is finished. And I Don’t understand why I need to wait for 2 frames to correctly detect current AnimatorStateInfo.
If you want to try it yourself delete both yield return null statements and run Start ScaleUp from context menu, and without them it will fail to detect correct AnimatorStateInfo
(try to run it at least 2 times in row)
public class AnimManager: MonoBehaviour
{
public enum AnimTypes
{
scaleUp,
scaleDown,
}
public Animator TestingAnimator;
public IEnumerator PlayAnimatorWaitToFinish(Animator myAnimator, AnimTypes myAnimType)
{
myAnimator.Play(myAnimType.ToString(), 0, 0);
//HERE I NEED TO WAIT 2 FRAMES
yield return null;
yield return null;
while (myAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime <= 1)
{
yield return null;
}
}
[ContextMenu("Start ScaleUp")]
public void StartUp()
{
StartCoroutine(StartAnimatorRoutine(TestingAnimator, AnimTypes.scaleUp));
}
public IEnumerator StartAnimatorRoutine(Animator myAnimator, AnimTypes animType)
{
yield return PlayAnimatorWaitToFinish(myAnimator, animType);
Finish(myAnimator);
}
public void Finish(Animator myAnimator)
{
Debug.Log("Finish Animator " + myAnimator.gameObject.name);
}
}
my Animator controller screen capture is in attachement
