Jump and fall animations not working

Hey there, I just made a game with some jump and fall animations but they won’t work it looks to me like they are repeating themselves before they’re finished. I unchecked any loop options and also unchecked can transition to self, my code is working fine I’m sure about that but it might be something with Animator tab settings? I have no clue, can someone help me?

Video of gametesting:

Okay i have seen your test video, and yeah you didn’t set up your animator correctly.


  1. You need to make transition to your jump animation from any state.
  2. Make sure you added transition to true when you click specific button correctly in your script, if you have it please share it so i can review it.
  3. Make sure the transition time is 0 between animations in 2D games.

Follow this steps and let me know if they worked for you!

@Kristifor_p Thank you for replying! But it’s not working yet. it shows me something, but it’s still repeating the first frame or something I made a new video:
- YouTube (the framerate is just timed badly so when you see it fall it flashes between the animations real quick and when u don’t see it fall it’s just timed so u only get to see the not falling flashing parts)

Here is my script: (The PlayerGroundController script is just a script with a separate collider on my characters feet to see whether I should be able to jump or not)

public Rigidbody2D rb;
public float movementSpeed = 1f;
public float shootingDelay;
public float jumpHeight = 1f;
public Animator Animator;
bool canShoot;
bool jump;
public static float direction = 1f;
public float shootT;
public float prevY;
public float newY;
public bool isFalling;
public bool isJumping;
float isFallingToggleT;
float isJumpingToggleT;

void FixedUpdate()
{
    if (jump == true)
    {
        rb.AddForce(new Vector2(0, Time.deltaTime * jumpHeight), ForceMode2D.Impulse);
        jump = false;
    }
}

void Update()
{
    isFallingToggleT += Time.deltaTime;
    isJumpingToggleT += Time.deltaTime;
    shootT += Time.deltaTime;

    if (Input.GetKeyDown(KeyCode.Space) && PlayerGroundController.canJump == true)
    {
        jump = true;
    }

    Animator.SetFloat("Speed", Mathf.Abs(Input.GetAxis("Horizontal")));
    transform.position += new Vector3(Input.GetAxis("Horizontal") * Time.deltaTime * movementSpeed * 1.5f, 0, 0);

    transform.localScale = new Vector3(direction * 0.2f, 0.2f, 1);

    if (Input.GetKey("a") && Input.GetKey("d") == false)
    {
        direction = -1;
        Animator.SetBool("isShooting", false);
        Animator.Play("blend_tree");
    }

    if (Input.GetKey("d") && Input.GetKey("a") == false)
    {
        direction = 1;
        Animator.SetBool("isShooting", false);
        Animator.Play("blend_tree");
    }

    if (Mathf.Abs(Input.GetAxis("Horizontal")) > 0.15)
    {
        Animator.speed = 2.25f;
    } else {
        Animator.speed = 1f;
    }

    if (shootT > 1)
    {
        Animator.SetBool("isShooting", false);
        Animator.Play("blend_tree");
    }

    if (Input.GetKey("j") && shootT > shootingDelay && Input.GetAxis("Horizontal") == 0 && PlayerGroundController.canJump == true)
    {
        Animator.SetBool("isShooting", true);
        Animator.Play("player_shooting");
        shootT = -0.25f;
        canShoot = true;

        if (shootT > shootingDelay + 0.1)
        {
            Animator.SetBool("isShooting", false);
        }
    }

    if (shootT > 0 && canShoot == true)
    {
        GunScript.shoot = true;
        canShoot = false;
    }

    newY = transform.position.y;

    if (newY < prevY)
    {
        Animator.SetBool("isFalling", true);
        isFalling = true;
        isFallingToggleT = 0;
    } else {
        if (isFallingToggleT > 0.1)
        {
            isFalling = false;
            Animator.SetBool("isFalling", false);
        }
    }

    if (newY > prevY)
    {
        Animator.SetBool("isJumping", true);
        isJumping = true;
        isJumpingToggleT = 0;
    } else {
        if (isJumpingToggleT > 0.1)
        {
            isJumping = false;
            Animator.SetBool("isJumping", false);
        }
    }

    prevY = newY;
}

}