Когда я нажимаю клавишу C, игрок заземлен и таймер не работает, он должен воспроизводить анимацию атаки, но он не играет!
И снова у меня проблема с анимацией падения: когда я иду послеприземляющийся игрок играет анимацию падения
Я использую Unity 4.5.x, а код C # и игра 2D
using UnityEngine;
using System.Collections;
public class movement : MonoBehaviour {
Rigidbody2D rb; // добавление физического тела игрока
Animator anim; // добавление аниматора игрока
public int jumpCount = 0; // счётчик прыжков
public Camera main; // берет камеру в редакторе
int jumpTimer = 0; // отвечает за активность таймера прыжка
public bool grounded = false; // переменная, отвечающая за приземлённость персонажа
bool jumping = false; // переменная прыжка, которая отвечает - в прыжке персонаж или нет
int attackNum = 1; // Номер атаки
int attackTimer = 0; // отвечает за активность таймера атаки
void Start () { // сначала сцена выполняет инструкции, написанные ниже
rb = GetComponent<Rigidbody2D> (); // получает компонент, работающий с физикой объекта игрока
anim = GetComponent<Animator>(); // получает компонент анимация объекта игрока
}
void Update () {
Debug.Log (anim.GetInteger("animTrigger"));
// (y > 0 = прыгает, y < 0 = падает)
if (rb.velocity.y == 0) { // если игрок не перемещается по оси y:
if (rb.velocity.y >= -7.105427E-15){ // eсли после первого условия скорость увеличивается отрицательном направлении:
jumping = false; // прыжок = ложь
grounded = true; // приземлён = правда
jumpCount = 0; // сброс счётчика прыжков
}
}
else if (rb.velocity.y > 0) { // если скорость по оси y больше 0:
jumping = true; // прыжок = правда
grounded = false; // приземлён = ложь
}
if (Input.GetKeyDown (KeyCode.X) && jumpCount < 2 && jumpTimer == 0) { // если игрок нажал на Х И счетчик прыжков меньше 2 И таймер прыжка равен 0:
jump (); // функция прыжок - персонаж прыгает
jumpCount += 1; // + к счётчику прыжков
jumpTimer = 1; // таймер начинает работу
StartCoroutine ("jumpTime"); // запуск таймера прыжка
}
if (Input.GetKeyDown (KeyCode.C) && grounded && attackTimer == 0) { // если нажата клавиша C И игрок приземлён И атака не играет:
anim.SetInteger ("animTrigger", attackNum + 4); // играет атака, заданная таймером ниже
attackTimer = 1; // включение таймера
StartCoroutine("attackTime");
}
if (grounded && jumping) { // если приземлён = правда и прыжок = правда(?):
Flip(); // функция поворота персонажа
anim.SetInteger ("animTrigger", 3); // играет анимация прыжка
jumping = false; // прыжок = ложь
}
else if (!grounded) { // если не приземлён
Flip(); // функция поворота персонажа
anim.SetInteger ("animTrigger", 4); // играет анимация падения
}
else if (Input.GetAxis ("Horizontal") == 0 && grounded) { // если игрок не двигается и приземлён = правда:
anim.SetInteger ("animTrigger", 1); // играет анимация стойки
}
else if (grounded && Input.GetAxis ("Horizontal") != 0) {
Flip(); // функция поворота персонажа
anim.SetInteger("animTrigger", 2); //играет анимация бега
}
}
void FixedUpdate(){ // каждый раз игроку обновляется движение по осям X и Y, не смотря ни на что
rb.velocity = new Vector2 (Input.GetAxis ("Horizontal") * 12f, rb.velocity.y); //
}
void jump(){ // функция прыжка
rb.AddForce (transform.up * 14F, ForceMode2D.Impulse); // добавление силы, направленной вверх и типа "Импульс"
}
void Flip() { // функция поворота
if (Input.GetAxis ("Horizontal") > 0) { // если игрок идет право:
transform.localRotation = Quaternion.Euler (0, 0, 0); // поворот вправо = обычное состояние
}
if (Input.GetAxis ("Horizontal") < 0) { // если игрок идет влево:
transform.localRotation = Quaternion.Euler (0, 180, 0); // поворот влево
}
}
IEnumerator jumpTime() { // счетчик до следующего прыжка
yield return new WaitForSeconds (0.4f); // таймер, который стартует и ждет прохождения опр. времени
jumpTimer = 0; // таймер прыжков сброшен
}
IEnumerator attackTime() { // таймер атак
yield return new WaitForSeconds (0.43F); // таймер, который стартует и ждет прохождения опр. времени
if (attackNum < 3) { // если номер атаки меньше 3:
attackNum += 1; // атака сменяется
} else if (attackNum == 3) { // если номер атаки = 3:
attackNum = 1; // атака становится начальной
}
attackTimer = 0; // сброс таймера атак
}
}
Я пытался отладить, но это показывает, что анимация даже ненаборы!