Transitions with blend tree only at end of animation

I want to create a Boulderdash-like idling animation using Sprites:

  • I have 4 idle animations (Standing, Eyeblinking, Foot-tapping, Blinking+Tapping)
  • Each animation consists of 8 frames (running at 20fps)
  • I’ve setup 2 Animator parameters “tap” and “blink”, that I set randomly to 0 or 1
  • I’ve setup a state with a blend tree, with 4 motions (my idle animations), 2D Freeform Cartesian, corresponding to tap and blink parameters

What works so far: I can set tap and blink parameters to 0/1 and the proper animation is played. However, it gets immediately blended into the next state, and I want the current animation to finish first completely, before it switches to the next one.

How can I achieve this? I tried setting physics engine timestep to the same 20fps as the animations have, and change the random parameters only every 8 FixedUpdate() steps, but it isn’t really in synchronization.

I’m no expert so there may be a better way, but maybe you could add an event onto the last frame of your animation like this:

alt text

And have a function that sets an animationFinished boolean. Maybe you’d need to set it to false in the first frame.

Also, you could maybe use something like this (where anim is a reference to the Animator):

if (anim.GetCurrentAnimatorStateInfo(0).IsName("AnimationName")

If the function needs to know which animation has just finished.