I'm stuggling with 2D animation transitions
I'm having trouble with switching between animation states for a sprite. The Parameters that I have set in the Animation Controller are: bool Grounded, bool IsWalking, and trigger IsJumping. My animations are: Idle, Walking, Falling, Jumping.
For some reason my Animations don't transition, I've tried removing certain transitions so I can get it to transition from Idle to Walking but I never see any transitions occur, sometimes I get it to start in the Falling animation because the sprite starts in the air.
I'm pretty sure I have all of my transitions set up correctly in my controller. Can someone tell me if it's a scripting mistake? Or I'm missing a step? Or Perhaps it is the Animator Controller? Anything would help, thank you.
public class PlayerCntroller : MonoBehaviour {
//public and private floats
public float speed;
public float JumpForce;
private Rigidbody2D rb;
private bool OnGround = false;
private float gravityScale = 0.8f;
Animator anim;
void Start () {
rb = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
}
void FixedUpdate () {
bool moveL = Input.GetKey("a");
bool moveR = Input.GetKey("d");
bool jump = Input.GetKey("w");
if (moveL == true)
{
Vector2 movement = new Vector2(-1, 0);
if (OnGround == false)
movement = movement * 0f;
rb.AddForce(speed * movement);
}
if (moveR == true)
{
Vector2 movement = new Vector2(1, 0);
if (OnGround == false)
movement = movement * 0f;
rb.AddForce(speed * movement);
}
if (OnGround == true)
{
gravityScale = 0;
}
if (OnGround == false)
{
gravityScale = 0.8f;
}
if (jump == true && OnGround == true)
{
Vector2 movement = new Vector2(0, 1);
rb.AddForce(movement * JumpForce * 100);
}
if (Input.GetKeyDown("d"))
transform.localScale = new Vector2(-0.25f, 0.25f);
if (Input.GetKeyDown("a"))
transform.localScale = new Vector2(0.25f, 0.25f);
animator(moveL, moveR, OnGround, jump);
}
void animator(bool moveL, bool moveR, bool OnGround, bool jump)
{
bool m = moveL == true || moveR == true;
bool c = OnGround;
anim.SetBool("IsWalking", m);
anim.SetBool("Grounded", c);
if (jump == true)
anim.SetTrigger("IsJumping");
}
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.CompareTag("Ground"))
{
OnGround = true;
}
}
void OnCollisionExit2D(Collision2D coll)
{
OnGround = false;
}
}
Your answer
Follow this Question
Related Questions
Tweaking screen transitions not to fire every time 0 Answers
Animator displaying wrong states 1 Answer
Animation Running Game 0 Answers
How do I puse an animation? 1 Answer
How to set the blend tree threshold value during run time? 0 Answers