- Home /
Idle animation plays while running (2D)
I have my character on stage with a transition between the Idle and Running animation, which is triggered when the parameter Speed is greater than 0.1, and a transition back when Speed is less than 0.1.
The animations are working however, when the character turns around and runs in the opposite direction, the idle animation plays for a second before switching to the running animation, causing the character to slide across the screen for a moment. It looks really terrible and I have no idea how to fix this. Any help will be greatly appreciated!
Here is the script for the character movement
public class PlayerScript : MonoBehaviour {
public float maxSpeed = 10f;
private bool facingRight = true;
private Rigidbody2D rb2d;
private Animator anim;
void Start()
{
rb2d = gameObject.GetComponent<Rigidbody2D>();
anim = gameObject.GetComponent<Animator>();
}
void FixedUpdate()
{
float move = Input.GetAxis("Horizontal");
// Set Animator parameter
anim.SetFloat("Speed", Mathf.Abs (move));
rb2d.velocity = new Vector2(move * maxSpeed, rb2d.velocity.y);
// Flip Player direction
if (move > 0 && !facingRight) {
flip ();
} else if (move < 0 && facingRight) {
flip ();
}
}
void flip()
{
facingRight = !facingRight;
Vector3 scale = transform.localScale;
scale.x *= -1;
transform.localScale = scale;
}
}
EDIT
Checking Exit Time on the transition from Run -> Idle prevents the character from sliding. But of course, now there is another problem. The running animation still plays for a second after the character actually stops. Any suggestions?
Well it's doing what you told it to do - your speed when turning will go below 0.1. You could maybe alleviate this with a new 'skidding' anim when speed is between 0.1 and 0, or play around with the anim transitions (http://docs.unity3d.com/$$anonymous$$anual/class-Transition.html)
Perhaps you can add an additional condition, e.g. play the idle animation if speed == 0 && acceleration == 0.
Answer by spooneystone · Jul 09, 2015 at 10:41 PM
Try and change input.getaxis to input. GetaxisRaw.
I tried this but the character still slides, thanks anyway :)
Your answer
Follow this Question
Related Questions
Delay the execution of something 1 Answer
Multiple Cars not working 1 Answer
How do I put a delay in this? 2 Answers
Distribute terrain in zones 3 Answers
Playing animation at the start 1 Answer