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