- Home /
Question by
samizak · Dec 07, 2014 at 10:18 PM ·
c#animationcharacter controller
Animation doesn't go back to idle in unity
i have a script made in c# to move my player here is the script:
using UnityEngine;
using System.Collections;
public class player_move : MonoBehaviour {
public float speed = 3.0F;
public float jump = 8.0f;
public float gravity = 1.0f;
private Vector3 movePlayer = Vector3.zero;
void Update() {
CharacterController controller = GetComponent<CharacterController>();
if (controller.isGrounded) {
movePlayer = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
movePlayer = transform.TransformDirection(movePlayer);
if (Input.GetKey ("up")){
controller.Move (movePlayer * speed * Time.deltaTime);
animation.Play ("moving");
}
if (Input.GetKey ("left")){
controller.Move (movePlayer * speed * Time.deltaTime);
}
if (Input.GetKey ("down")){
controller.Move (movePlayer * speed * Time.deltaTime);
animation.Play ("moving");
}
if (Input.GetKey ("right")){
controller.Move (movePlayer * speed * Time.deltaTime);
}
if (Input.GetKeyDown(KeyCode.Space)){
movePlayer = transform.TransformDirection(Vector3.up);
movePlayer.y -= gravity * Time.deltaTime;
controller.Move (movePlayer);
}
else if(Input.GetKeyUp ("up") || Input.GetKeyUp ("down")){
animation.Play ("idle");
}
}
}
}
what i am trying to do is when the user presses up or down arrow key then it should move and play an animation. But as soon the user releases the key, it should go back to the idle animation and not freeze the arms in mid-air.
Comment
Answer by static_cast · Dec 07, 2014 at 10:58 PM
Try this:
else if(!Input.GetKey("up") || !Input.GetKey("down")){
animation.Play("idle"); //make sure this name is correct
}
Or you could change up your input script by doing this:
using UnityEngine;
using System.Collections;
public class player_move : MonoBehaviour {
public float speed = 3.0F;
public float jump = 8.0f;
public float gravity = 1.0f;
private Vector3 movePlayer = Vector3.zero;
void Update() {
CharacterController controller = GetComponent<CharacterController>();
if(controller.isGrounded) {
movePlayer = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
movePlayer = transform.TransformDirection(movePlayer);
if(Input.GetKey("up") || Input.GetKey("down")) {
controller.Move(movePlayer * speed * Time.deltaTime);
animation.Play("moving");
}
else
animation.Play("idle");
if(Input.GetKeyDown(KeyCode.Space)) {
movePlayer = transform.TransformDirection(Vector3.up); //Not sure you need this line.
movePlayer.y -= gravity * Time.deltaTime;
controller.Move(movePlayer);
}
}
}
}
Your answer
Follow this Question
Related Questions
animation control problem 0 Answers
Multiple Cars not working 1 Answer
control animation using animation control class 1 Answer
Distribute terrain in zones 3 Answers
Anisprite animation from OnTriggerEnter 0 Answers