- Home /
animations controlling
Hi, I'm a beginner in Unity and i met with a problem.
So I have an object - pigeon. It has two animations - 'fly' and 'turn'. 'fly' is a default animation that should play on loop, while 'turn' is an animation that should play when, well, player moves in the opposite direction(its basically the animation of pigeon performing the U-turn).
Now, the problem is my lack of C# knowledge and extreme tiredness. I need my bird to turn in the opposite direction when 'turn' animation ends, but i dont know how. Right now it turns immediatly and at the end of 'turn' animation it turns another time. English isn't my main language so please excuse me for whatever mistakes i made, thanks.
here's image if that helps
here's a code:
using UnityEngine;
using System.Collections;
public class moving : MonoBehaviour {
public float movementSpeed = 10;
private bool canTurn = true;
private bool canMove = true;
//something i took from tutorial
Animator myAnim;
int turnHash = Animator.StringToHash("turn");
void Start ()
{
myAnim = GetComponent<Animator>();
}
void Update()
{
//check if 'turn' animation is playing. If it does, pigeon cant move
if (myAnim.GetCurrentAnimatorStateInfo (0).IsName ("turning")) {
canMove = false;
} else {
canMove = true;
}
//check if... uhhh... I think it checks if 'turn' animation is finished playing
if (myAnim.GetCurrentAnimatorStateInfo (0).normalizedTime > 1 && !myAnim.IsInTransition (0) && myAnim.GetCurrentAnimatorStateInfo (0).IsName ("turning")) {
canTurn = false;
} else {
canTurn = true;
}
if (canMove == true) {
if (Input.GetKey ("right") && canMove == true && !Input.GetKey ("left")) {
//if pigeon is facing the left and he can turn, play 'turn' animation
if (transform.eulerAngles.y == 0 && canTurn == true) {
myAnim.SetTrigger (turnHash);
}
//if it can move, it moves(and rotates)
//if (myAnim.GetCurrentAnimatorStateInfo (0).normalizedTime > 1 && !myAnim.IsInTransition (0)) {
//}
transform.Translate (Vector3.back * movementSpeed * Time.deltaTime);
transform.eulerAngles = new Vector3 (0, 180, 0);
}
//pretty much the same, but for left key press
else if (Input.GetKey ("left") && canMove == true && !Input.GetKey ("right")) {
if (transform.eulerAngles.y == 180 && canTurn == true) {
myAnim.SetTrigger (turnHash);
}
//if (canTurn == false) {
//}
transform.eulerAngles = new Vector3 (0, 0, 0);
transform.Translate (Vector3.back * movementSpeed * Time.deltaTime);
}
}
}
}
Answer by PhoenixFeather · Oct 24, 2016 at 01:33 PM
So i fixed most of the problems, only the biggest one is left - i still need my bird to
transform.eulerAngles = new Vector3 (0, 0, 0);
after the 'turning' animation finishes. How do i track when animation is finished?
Someone, please help me. I tried doing it like this
if (myAnim.GetCurrentAnimatorStateInfo (0).IsName ("turning") && myAnim.GetCurrentAnimatorStateInfo (0).normalizedTime >= 1) {
print ("animation finished");
if (transform.eulerAngles.y == 0) {
transform.eulerAngles = new Vector3 (0, 180, 0);
print ("turned to the left");
}
else if (transform.eulerAngles.y == 180) {
transform.eulerAngles = new Vector3 (0, 0, 0);
print ("turned to the right");
}
}
but it's not working
Your answer
