Animation states do not match character's behavior
I am creating a simple endless runner game. The ground is made of different colliders. There are four states of animation:
Run, Get force, Jump, Big jump. Every state is looped and there are no exit times.
Unfortunately, it doesn't work well. The biggest problem is, when I press spacebar quickly, the character is in the state 0 (run animation) while in the air. Sometimes, also in the air, the character is able to get force. To me it seems, that even when the character is making jump it can touch another collider. However, my prevention methods don't work. How can I make those animation states match the character behavior?
 using UnityEngine;
 using System.Collections;
 using UnityEngine.UI;
 
 public class Move : MonoBehaviour {
 
     public Animator animator;
     Rigidbody rigidBody;
     CapsuleCollider capsuleCollider;
     int isGrounded=2;
     int jumpType;
     float force = 2;
     float jump = 20000;
     float minJump = 0.1f;
     float jumpTime;
     bool isJumping;
 
     void Start () 
     {
         animator = GetComponentInChildren<Animator>();
         rigidBody=GetComponent<Rigidbody>();
         capsuleCollider = GetComponent<CapsuleCollider>();
     }
 
     void Update()
     {   
     if(isJumping)
     {
         jumpTime+=Time.deltaTime;
     }
         // if the character is grounded
         if (isGrounded==1)
         {
             //jump if the key is released, jump
             if(Input.GetKeyUp(KeyCode.Space) || Input.GetMouseButtonUp(0))
             {   isJumping=true;
                 isGrounded=2;
 
                 if(rigidBody.velocity.y<30)
                 {
                     rigidBody.AddForce(Vector3.up*jump*force*0.55f);
 
                     jumpType=2;
 
                     if (force>2.5f) jumpType =3;
                     animator.SetInteger("state",jumpType);
                     force=2;
                 }
 
             }
             //if the key is pressed, add force. longer you hold, higher you jump
             else if(Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
             {
                 animator.SetInteger("state",1);
                 force+=Time.deltaTime*0.7f;
             }
             //just keep running 
             else if(rigidBody.velocity.y<0)
             {   
                 animator.SetInteger("state",0); 
             }
         }
 
     }
 
 
     void OnCollisionEnter(Collision collision)
     {   
         //you are grounded. additional 'if', because sometimes you touch collider after jump        
         if(isJumping && isGrounded==2)
         {   if(jumpTime>minJump)
         {
             isGrounded=1;   
             isJumping=false;
             jumpTime=0;
         }}
 
     }
 
 }
Your answer
 
 
             Follow this Question
Related Questions
Ragdoll Collider problem 0 Answers
how to detect a collision from using 2-D colliders? 0 Answers
Colliders for tunnels 0 Answers
Physics Engine doesn't work,Collisions never work 0 Answers
Need a simple health script 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                