Пусть враг взорвется стильно!
В текущем состоянии Space Shooter враги и лазер взаимодействуют друг с другом и запускают различные события. Тем не менее, эффект не очень хорошо для глаз. Оба GameObject просто исчезают, ничего особенного. Это не очень здорово, не так ли?
Давайте изменим это и создадим крутой эффект взрыва, чтобы сделать внешний вид еще более приятным!
Создание анимации
Используя ресурсы, предоставленные GameDevHQ, у нас есть все необходимые спрайты.
- Откройте окно Анимация
(Окно › Анимация › Анимация) - Нажмите на врага, чтобы создать для него анимацию.
- Нажмите «Создать» в окне Анимация.
- Назовите свою анимацию так, чтобы ее было легко найти.
- Включите режим ключевого кадра/записи, нажав красную кнопку записи
- Перетащите каждый спрайт, который вы хотите использовать в анимации.
Вот GIF, показывающий весь процесс:
НЕ ЗАБУДЬТЕ применить добавленную анимацию к каждому отдельному врагу, который мы хотим создать! Для этого нажмите Enemy › Overrides › Apply All
Мы только что создали анимацию. Давайте запустим игру, чтобы увидеть ее в действии:
Как видите, все странно. Анимация воспроизводится еще до того, как мы ударим врага. Это даже зацикливается!
Мы не собирались этого делать. Давайте посмотрим, что вызывает это.
Проверка окна Animator
Давайте проверим окно Animator и посмотрим, что происходит.Откройте его, выбрав Window › Animation › Animator
Как видите, у нас здесь четыре блока, которые мы назовем «Состояния». Давайте подробнее рассмотрим состояние входа. Оранжевая стрелка указывает на анимацию взрыва врага, которую мы только что создали.
Вот именно в этом и проблема! Состояние Entry вызывается сразу после запуска игры. Поэтому, как только мы нажмем кнопку воспроизведения в редакторе, он сразу же воспроизведет анимацию. Это может пригодиться в некоторых сценариях, но точно не в этом. Чтобы решить эту проблему, нам нужно создать новое вызываемое состояние и создать переход к анимации.
Настройка нового состояния
- Щелкните правой кнопкой мыши серую область сетки
- Выберите «Создать состояние».
- Нажмите Пусто.
- При необходимости переименуйте новое состояние.
Имея новое пустое состояние, нам нужно сделать его состоянием по умолчанию. В противном случае у нас был бы тот же результат, что и у бегора, и враги взорвались бы до того, как мы их ударим.
- Щелкните правой кнопкой мыши состояние «Пустой» .
- Выберите «Установить состояние слоя по умолчанию».
Реализация триггера
Сначала нам нужно создать переход к анимации взрыва. В противном случае анимация никогда не будет воспроизводиться.
- Щелкните правой кнопкой мыши состояние "Пусто".
- Выберите «Выполнить переход».
- Наведите мышку на созданный вражеский взрыв и щелкните левой кнопкой мыши
Теперь, когда все настроено, мы можем создать триггер. Здесь все просто, поэтому мы не будем использовать слой анимации. Вместо этого мы используем параметры.
- В окне Animator нажмите «Параметры» вверху.
- Нажмите значок + в правом верхнем углу.
- Выберите Триггер.
- Переименовать триггер
Чтобы воспроизводить анимацию только при ее запуске, нам нужно создать для нее условие.
- Нажмите на стрелку перехода
- В Инспекторе прокрутите вниз, пока не найдете "Условия".
- Нажмите значок + в правом нижнем углу
Активация триггера с помощью кода
Нам нужен доступ к аниматору. Та же процедура, что и всегда.
Переменная › Обработчик › NullCheck
Мы хотим делать следующие вещи всякий раз, когда враг уничтожается:
- Уничтожьте коллайдер, чтобы избежать повторного удара во время воспроизведения анимации
Подумайте об отсылке и дескрипторе! - Установите для скорости значение 0.
- Запустить анимацию
- Уничтожьте врага после того, как завершится анимация.
Чтобы сохранить модульность скрипта, давайте создадим для этого метод:
Наконец, мы должны вызвать метод внутри метода OnTriggerEnter2D. Вот как это будет выглядеть в итоге:
Избавление от цикла
В самом конце мы должны обязательно отключить цикл анимации уничтожения.
- Щелкните файл EnemyExplosion_anim в представлении проекта.
- Снимите флажок «Время цикла»
Давайте посмотрим на конечный результат: