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.
- You need to make transition to your jump animation from any state.
- 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.
- 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;
}
}