Почему, когда я нажимаю C, моя анимация не воспроизводится? - PullRequest
0 голосов
/ 21 октября 2019

Когда я нажимаю клавишу 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; // сброс таймера атак
}
}

Я пытался отладить, но это показывает, что анимация даже ненаборы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...