Как реализовать последовательную анимацию, которая воспроизводится один раз и останавливается на последнем кадре? (через аниматора) - PullRequest
0 голосов
/ 25 октября 2019

У меня есть спрайт "Score_off", который должен проигрывать анимационные клипы с появлением / исчезновением случайного сгенерированного числа после нажатия кнопки. Цикл, который нужно сделать, следующий:

  1. После нажатия кнопки некоторый код получает случайное число «Оценка» из массива [0,1,2,3]
  2. Sprite воспроизводит анимациюисчезновения предыдущего номера. (Один раз)
  3. Sprite воспроизводит анимацию появления текущего номера. (Один раз)
  4. Анимация останавливается на последнем кадре, который показывает текущее число.

Итак, у меня есть восемь клипов анимации: 0_anim |0_anim_reverse ... 3_anim |3_anim_reverse.

"_обратные" клипы - это те же анимации со скоростью = -1. Все клипы имеют отключенный параметр цикла.

Я создал восемь (bool) параметров для каждого состояния, связывает первую анимацию с каждой анимацией в Animator и устанавливает условие для каждой ссылки.

Снимок экрана Animator: https://sun9 -26.userapi.com / c857636 / v857636970 / b542e / Et8GtY25Hi0.jpg

//some roll code
int score = GetRandomScore();
Score_off.GetComponent<AnimatorScore>().PlayAnimation(score, Score_off);

//Score_off script:
public class AnimatorScore : MonoBehaviour
{
    public string currentState = "First";

    IEnumerator Waiting()
    {
        yield return new WaitForSeconds(2);
    }

public void PlayAnimation(int animationToPlay, GameObject target)
    {
        Animator anim = target.GetComponent<Animator>();

        anim.SetBool(currentState, false); //remove bool of old anim

        if (currentState != "First")
        {
            currentState += "_reverse";
            anim.SetBool(currentState, true);  
        }

        StartCoroutine(Waiting());
        anim.SetBool(currentState, false); //disable previous anim

        currentState = animationToPlay.ToString() + "_anim";
        anim.SetBool(currentState, true); //play new anim
    }
}

Это работает неправильно - отключение кодастарая анимация, запускает анимацию «Первый» на пару мс и воспроизводит текущую текущую анимацию, не воспроизводя исчезающую анимацию. А когда предыдущее число является текущим - анимация отсутствует.

Пожалуйста, помогите мне выбрать правильный способ реализации этого сценария анимации.

1 Ответ

0 голосов
/ 28 октября 2019

Используйте конечные автоматы анимации.

Создайте состояние анимации, представляющее состояние ожидания (ваш последний кадр), и перейдите к нему в конце состояния воспроизведения анимации. Укажите время выхода в переходе в качестве длины последовательной анимации, которую вы сделали.

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