Задача: настроить анимацию взрыва, которая запускается и воспроизводится, когда враг умирает.

Войдите в представление префаба врага, откройте окно анимации и нажмите «Создать», чтобы создать новую анимацию. Выберите все сплайсированные спрайты и перетащите их в окно анимации.

Снимите флажок Время цикла в анимации уничтожения врага. Дважды щелкните контроллер уничтожения врага и создайте новое состояние анимации с именем Пустой. Щелкните его правой кнопкой мыши, чтобы установить состояние анимации по умолчанию, чтобы враги не взрывались при появлении.

Создайте переход к состоянию анимации Враг уничтожен с Условием срабатывания под названием OnEnemyDeath.

Снимите флажок Имеет время выхода. Это гарантирует, что при срабатывании OnEnemyDeath анимация взрыва будет воспроизводиться сразу, а не ждать завершения цикла анимации Empty.

Измените Длительность перехода с 0,25 на 0. Это установит его таким образом, что при переходе от одной анимации к другой следующая анимация воспроизводится сразу же без дополнительного времени перехода.

В классе Enemy мы создаем дескриптор аниматора и в качестве хорошей практики пишем нулевую проверку. Затем в методе OnTriggerEnter2D мы использовали anim.SetTrigger(“OnEnemyDeath”); для установки триггера OnEnemyDeath.

Как сейчас игра, анимация не будет воспроизводиться, когда враг умирает. Это потому, что враг уничтожается сразу после вызова анимации. Нам нужно изменить вызов методов Destroy, добавив 2.8f для каждого. Это немного больше, чем продолжительность одного полного цикла анимации взрыва.

Теперь должна проиграть вся анимация, а затем враг будет уничтожен.

В настоящее время, если игрок стреляет во врага и проигрывается анимация, функциональность врага остается неповрежденной и не будет уничтожена до истечения 2,8 секунды. В конечном итоге игрок теряет жизнь каждый раз, когда враг продолжает двигаться вниз, даже если в него стреляли.

Есть два способа исправить эту ошибку. Либо мы можем отключить отдельные компоненты врага, которые причиняют вред игроку, либо, как только игрок стреляет во врага, враг перестает двигаться.

Мы установим скорость врага на 0. Если игрок летит во взрыв, пока он неподвижен, то логично, что игрок пострадает.

Теперь анимация работает правильно с этим исправлением: