Hello guys, i’ve been trying to make a 3rd person game
animations are controlled by a script.
Run and Idle works fine but when i use jump animation, the clip doesn’t run completely.
It runs until i release the space bar and then goes back to idle.
here is the script i am using for 3rd person controller.
using UnityEngine;
using System.Collections;
public class CharacterController : MonoBehaviour {
public Animator animator;
[System.Serializable]
public class MoveSettings
{
public float forwardVel = 9;
public float rotateVel= 80;
public float jumpVel =25;
public float distToGrounded =0.1f;
public LayerMask ground;
}
[System.Serializable]
public class PhySettings
{
public float downAccel=0.75f;
}
[System.Serializable]
public class InputSettings
{
public float inputDelay = 0.1f;
public string FORWARD_AXIS= "Vertical";
public string TURN_AXIS= "Horizontal";
public string JUMP_AXIS= "Jump";
}
public MoveSettings moveSetting = new MoveSettings ();
public PhySettings phySetting = new PhySettings ();
public InputSettings inputSetting = new InputSettings ();
Vector3 velocity= Vector3.zero;
Quaternion targetRotation;
Rigidbody rBody;
float forwardInput, turnInput, jumpInput;
public Quaternion TargetRotation{
get {return targetRotation;}
}
bool Grounded ()
{
return Physics.Raycast (transform.position, Vector3.down, moveSetting.distToGrounded, moveSetting.ground);
}
// Use this for initialization
void Start () {
//ANIMACIONES
animator = GetComponent<Animator>();
//FIN ANIMACIONES
targetRotation = transform.rotation;
if (GetComponent<Rigidbody> ()) {
rBody = GetComponent<Rigidbody> ();
} else {
Debug.LogError("NECESITA UN RIGIDBODY EL PERSONAJE.");
}
forwardInput = turnInput = jumpInput = 0;
}
void GetInput()
{
forwardInput = Input.GetAxis (inputSetting.FORWARD_AXIS);
turnInput = Input.GetAxis (inputSetting.TURN_AXIS);
jumpInput = Input.GetAxisRaw (inputSetting.JUMP_AXIS);
}
// Update is called once per frame
void Update () {
GetInput ();
Turn ();
}
void FixedUpdate() {
animator.SetFloat ("Run", forwardInput);
animator.SetFloat ("Jump", jumpInput);
Run ();
Jump ();
rBody.velocity = transform.TransformDirection (velocity);
}
void Run(){
if (Mathf.Abs (forwardInput) > inputSetting.inputDelay) {
//..move
velocity.z = moveSetting.forwardVel*forwardInput;
} else {
// ZERO-Velociddad.
velocity.z=0;
}
}
void Turn(){
if(Mathf.Abs(turnInput)>inputSetting.inputDelay){
targetRotation*=Quaternion.AngleAxis(moveSetting.rotateVel*turnInput*Time.deltaTime, Vector3.up);
}
transform.rotation = targetRotation;
}
void Jump() {
if (jumpInput > 0 && Grounded ()) {
// JUMP
velocity.y=moveSetting.jumpVel;
} else if (jumpInput == 0 && Grounded ()) {
//ZERO OUT OUR VELOCITY.Y
velocity.y=0;
} else
{
//DECRASE VELOCITY.Y
velocity.y-=phySetting.downAccel;
}
}
}