Unity запускает зацикленную анимацию снова при нажатии кнопки - PullRequest
0 голосов
/ 03 мая 2018

В настоящее время я создаю некоторые (не зацикленные) анимации в Unity, которые должны запускаться при нажатии кнопки пользовательского интерфейса. У меня есть четыре кнопки для четырех анимаций. В настоящее время это работает так: я нажимаю кнопку 1, а затем анимация 1 играет. Если затем я нажимаю кнопку 2, чтобы воспроизвести анимацию 2, я могу снова нажать кнопку 1, чтобы запустить анимацию 1.

Дело в том, что анимация1 может воспроизводиться снова, только если ранее воспроизводилась другая анимация. Поэтому мой вопрос: что мне нужно изменить в следующем коде, чтобы, например, анимация1 воспроизводилась при каждом нажатии кнопки1?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MultiAnimations : MonoBehaviour {

    public Animator cubeAnimator;
    public bool anim1;
    public bool anim2;
    public bool anim3;
    public bool anim4;

// Use this for initialization
    void Start () {
        cubeAnimator.enabled = false;
        anim1 = false;
        anim2 = false;
        anim3 = false;
        anim4 = false;

    }

    public void anim1Clicked ()
    {
        cubeAnimator.enabled = true;
        anim1 = true;
        anim2 = false;
        anim3 = false;
        anim4 = false;

        if (anim1 == true)
        {
            cubeAnimator.SetBool("anim1", true);
            cubeAnimator.SetBool("anim2", false);
            cubeAnimator.SetBool("anim3", false);
            cubeAnimator.SetBool("anim4", false);
        }
    }

    public void anim2Clicked ()
    {
        cubeAnimator.enabled = true;
        anim1 = false;
        anim2 = true;
        anim3 = false;
        anim4 = false;

        if (anim2 == true)
        {
            cubeAnimator.SetBool("anim1", false);
            cubeAnimator.SetBool("anim2", true);
            cubeAnimator.SetBool("anim3", false);
            cubeAnimator.SetBool("anim4", false);
        }
    }

    public void anim3Clicked()
    {
        cubeAnimator.enabled = true;
        anim1 = false;
        anim2 = false;
        anim3 = true;
        anim4 = false;

        if (anim3 == true)
        {
            cubeAnimator.SetBool("anim1", false);
            cubeAnimator.SetBool("anim2", false);
            cubeAnimator.SetBool("anim3", true);
            cubeAnimator.SetBool("anim4", false);
        }
    }

    public void anim4Clicked()
    {
        cubeAnimator.enabled = true;
        anim1 = false;
        anim2 = false;
        anim3 = false;
        anim4 = true;

        if (anim4 == true)
        {
            cubeAnimator.SetBool("anim1", false);
            cubeAnimator.SetBool("anim2", false);
            cubeAnimator.SetBool("anim3", false);
            cubeAnimator.SetBool("anim4", true);
        }
    }
}

Анимации связаны с переходами и bools. Я ориентировался на этот урок: https://www.youtube.com/watch?v=Q_5FhXF9a3k

РЕШЕНО: Код, представленный в руководстве по YouTube, довольно замысловатый. Вы можете сохранить много строк кода, чтобы просто написать это так:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MultiAnimations : MonoBehaviour {

    public Animator cubeAnimator;

    // Play Animation 1 - Copy this for the other animations
    public void playAnimation1 ()
    {
        cubeAnimator.Play("animation1", -1, 0f);
    }
}

1 Ответ

0 голосов
/ 03 мая 2018

Где твой метод обновления? Как вы называете эти пустые методы?

Поставьте метод обновления с условиями, чтобы проверить, какая кнопка нажата. Вот как то так:

void Update() 
{
    if (Input.GetKeyDown("space"))
    {
       //Play animation. 
    }            
}

РЕДАКТИРОВАТЬ: Хорошо, когда вы нажимаете кнопку, чтобы воспроизвести первую анимацию, и вы нажимаете эту кнопку еще раз, анимация уже установлена, поэтому анимация уже воспроизведена. Вам нужно установить значение false после того, как вы закончите воспроизведение анимации. По этой причине он воспроизводится снова при нажатии других кнопок.

РЕДАКТИРОВАТЬ: попробуйте этот стиль

public void anim1Clicked()
{
   animation.Play("anim1");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...