Как интегрировать прыжковую анимацию с Unity

Сегодня я закончил свою первую анимацию прыжков в Blender, которую я хотел интегрировать в Unity. Я подумал, что мне просто нужно сделать что-то вроде «Хорошо, когда я нажимаю кнопку прыжка, запускаю анимацию прыжка и все!». Даже не близко!

Я сделал это, и результат был ... не совсем то, что я ожидал.

Я уверен, что процесс, который я описал ранее, будет работать в некоторых конкретных случаях, но, к сожалению, не в моем.

Мне пришлось пройти через более длинный метод.

Быстрый взгляд в прыжок

Обычный прыжок можно разделить на три этапа:

  • Импульс прыжка: когда наш персонаж получает импульс и прыгает.
  • Фаза падения: когда наш персонаж пытается оставаться стабильным, находясь в воздухе.
  • Фаза посадки: когда наш персонаж, все еще в воздухе, готовится к достижению земли.

Как это работает в игре?

Когда игрок нажимает пробел (который, очевидно, является кнопкой прыжка ), он запускает анимацию прыжка.

Когда игрок находится в воздухе, начинается другая анимация: падающая фаза, которая повторяется, пока не достигнет земли.

Затем запускается анимация приземления, но с одной тонкостью: если эта анимация начинается, когда персонаж только что достиг земли, уже слишком поздно! На этом этапе мы знаем, что собираемся упасть на землю (просто потому, что можем это увидеть). Таким образом, мы можем легко оценить расстояние и подготовиться к удару, находясь в воздухе.

Давайте подумаем о том, как мы себя ведем, когда прыгаем! Когда мы видим, что собираемся упасть на землю , мы готовимся к «удару». Мы можем, потому что у нас есть видение земли и мы можем быстро оценить, когда мы должны быть готовы.

Чего не хватает в нашем случае, так это того, чтобы оценить расстояние нашего персонажа от земли! Я покажу вам один метод, чтобы оценить это расстояние от персонажа до земли, но учтите, что есть много других способов сделать это. Может использоваться в другом игровом движке.

Хитрость заключается в том, чтобы направить луч от нашего персонажа в направлении его скорости. Затем мы сможем запустить анимацию приземления в нужное время, прежде чем мы ее достигнем! 🥳

Готов?

Реализация с Unity

В Unity есть инструмент под названием Raycast, который даст нам именно то, что мы хотим.

Мы действуем в два этапа:

  • Мы посылаем Raycast в направлении нашей скорости, чтобы определить расстояние до того, как мы коснемся земли.
  • Если наша скорость на вертикальной оси, у в Unity, отрицательна (что означает, что мы падаем), а земля слишком близко, то мы запускаем анимацию посадки.

Это прекрасно, но теперь, когда мы запрыгиваем в игру, скрипт запускает нашу анимацию в нужное время. Бесконечность не предел! ️