Jump Animatoin clip error
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;
}
}
}
Answer by Maruder · Sep 11, 2015 at 09:19 AM
Hello,
It appears to me that u are setting floats only found under the parameters tab of the animator window in Unity. In particular, you are setting "Run" and "Jump" floats only found in the unity editor. It would be helpful to see what conditions you put under the parameters tab of the animator window so I can help you out with this problem.
void FixedUpdate() {
animator.SetFloat ("Run", forwardInput);
animator.SetFloat ("Jump", jumpInput);
Run ();
Jump ();
rBody.velocity = transform.TransformDirection (velocity);
}
Thanks $$anonymous$$aruder for your help
These are the animator settings I am using.
http://imgur.com/4dkuj2v,k3AzgOr,AAR2kp9,mkpuAkL,$$anonymous$$FZqV3p,UtXOPBy#1 I hope it can help.
For this script you might want to try using Input.GetButtonDown or Input.GetAxis function for the jumping to see if that fixes your problem of your clip not properly finishing the jump. GetAxisRaw function only returns either -1 or 1 as directional input for your jump.
Also you may want to use Debug.Logs for jumpInput to see whether or not your jump input are passing the conditions to change from jump to idle.