Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Сегодня рассмотрим, как сделать процедурное изменение анимации после получения урона.

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

Мой тг канал про анимацию

Подготовка анимаций

Для начала подготовим анимации, которые будем накладывать поверх базовой локомоции.

M_Girl_Wounded

Из этой анимации мы возьмём движения плеч и рук и наложим их поверх базовой анимации с помощью Layered Blend per Bone.

Layered Blend per Bone смешивает анимации по выбранным костям и их дочерней иерархии.

Например: ноги проигрывают анимацию бега, а верхняя часть тела анимацию стрельбы.

M_Girl_WounderAdd и M_Girl_WounderAdd02

Эти анимации мы будем использовать как Additive Animation хотя, по сути, это отдельные позы, которые будут подвешиваться поверх базовых анимаций

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

Важно: эти позы я сделал на основе A-позы, в которой персонаж находился во время скиннинга.

Skinning это привязка вершин 3D-модели к костям скелета с помощью весов, чтобы при движении костей модель правильно деформировалась.

Далее коротко рассмотрим настройки.

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Настройки аддитивной анимации

Additive Anim Type Mesh Space: анимация рассчитывается относительно всего персонажа, а не каждой кости отдельно. Поэтому наклоны и повороты работают стабильнее в разных позах.

Base Pose Type Skeleton Reference Pose: в качестве базовой позы берётся стандартная Reference Pose скелета.

Unreal вычитает ее из текущей анимации и сохраняет только получившуюся разницу.

Переходим в Animation Blueprint

Создадим Animation Layers.

Animation Layers это отдельные блоки внутри Animation Blueprint, в которых собирается собственная анимационная логика.

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

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Заходим в Animation Layer

В этом Animation Layer я создал вход BaseAnim, через который передается базовая анимация персонажа. Полученная поза сохраняется в Cached Pose с названием BaseAnim, чтобы дальше использовать её при смешивании с раненой анимацией.

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Cached Pose это сохраненная рассчитанная поза (анимация), которую можно повторно использовать в AnimGraph без повторного расчёта всей анимационной логики.

Теперь применим нашу анимацию для плеч и рук

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

сохраненная базовая анимация BaseAnim смешивается с анимацией раненого персонажа M_Girl_Wounded через Layered Blend per Bone.

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Настройки Layered Blend per Bone

Blend Mode — Branch Filter: выбирает, на какие ветки скелета накладывать раненую анимацию.

Bone Name — clavicle_r и clavicle_l: слой применяется к обеим ключицам и костям рук, расположенным ниже них в иерархии.

Blend Depth — 1: раненая анимация полностью включается со следующей дочерней кости, а на ключице смешивается частично.

Примерно такой результат у нас получится.

Добавляем процедурное смещение для кости Pelvis

Идём дальше и добавляем процедурное смещение во время ходьбы с помощью Bone Transform и Sync Markers.

Bone Transform изменяет положение, вращение или масштаб выбранной кости прямо в Animation Blueprint.

Sync Markers — это метки внутри анимаций, которые помогают синхронизировать одинаковые фазы движения, например шаг левой и правой ноги.

Применяем маркеры к нашим анимациям перемещения.

Далее переходим в Animation Graph и выбираем наши анимации, В моём случае это нода Motion Matching.

Указываем использовать Sync Group и задаем для нее название.

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Если у вас обычная State Machine то такие настройки нужно делать по отношению к нашим анимациям.

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Теперь переходим в Event Graph и настроим логику для Bone Transform

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Нас интересуют подчеркнутые места

Get Time to Closest Marker ищет ближайший маркер R в Sync Group Locomotion.

Проверяется, что:

  • время до маркера больше 0;
  • время до маркера меньше 0,4 секунды;
  • персонаж движется (Is Moving).

Если все условия выполнены, переменная Foot R становится True.

Такая же проверка выполняется для маркера L, после чего обновляется переменная Foot L.

В результате Foot R и Foot L показывают, какая нога приближается к моменту контакта с поверхностью.

Или, если объяснить проще:

Система смотрит, сколько времени осталось до маркера правой ноги R.

Если до него осталось от 0 до 0,4 секунды и персонаж движется, Foot R становится True.

То же самое повторяется для левой ноги по маркеру L, а результат записывается в Foot L.

Кстати, эту логику можно применять и в Event Blueprint Update Animation.

Event Blueprint Post Evaluate Animation вызывается после расчёта итоговой позы. Логика из него уже не изменит позу в текущем кадре только выполнит действия после её вычисления или подготовит данные для следующего кадра.

Event Blueprint Update Animation вызывается до расчёта AnimGraph. Здесь обычно обновляют скорость, направление, состояния и другие переменные, которые влияют на текущую позу.

Возвращаемся в наш Animation layers

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Первая нода Transform (Modify) Bone изменяет кость pelvis.

Таз дополнительно опускается по оси Z на -9. Значение работает в режиме Add to Existing, поэтому оно не заменяет положение таза из анимации, а добавляется поверх него.

Это делает позу ниже : персонаж выглядит ослабленным и сильнее проседает во время движения.

Параметр Alpha переведён в тип Bool. Благодаря этому мы можем включать и выключать эту логику, когда персонаж ранен.

Важный момент: к ногам применяется нода Leg IK. Без неё персонаж будет проваливаться в землю.

Leg IK нода, которая процедурно сгибает ногу и перемещает стопу к заданной цели, сохраняя правильное положение колена. Часто используется для постановки ног на поверхность.

Идём дальше

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Следующая нода Transform (Modify) Bone активируется переменной Foot R.

Когда правая нога приближается к маркеру контакта с землёй, к выбранной кости pelvis добавляются:

  • смещение по X на -15;
  • поворот по Y на 5°;
  • поворот по Z на 5°.

Таким образом, шаг правой ноги дополнительно деформируется и начинает отличаться от обычной здоровой походки.

Третья нода активируется переменной Foot L.

Для левой стороны добавляются:

  • смещение по Z на -6;
  • поворот по X на 5°;
  • поворот по Y на -7°;
  • поворот по Z на -5°.

Это создаёт асимметрию между ногами и делает движение похожим на хромоту, а не просто на обычную анимацию с наклоненным корпусом

Плавное включение Bone Transform none

У нод Transform (Modify) Bone параметр Alpha Input Type установлен в Bool Value.

Переменные Foot R и Foot L включают соответствующие изменения костей. При этом используются:

  • Blend In Time 0.5;
  • Blend Out Time 0.5;

Поэтому изменения не включаются мгновенно, а плавно нарастают и исчезают.

Если проще - когда в анимации настает время одного из маркеров , мы плавному включаем году Bone transform .

Dead Blending

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Нода Dead Blending сглаживает переходы между позами. Она уменьшает резкие скачки, когда система переключается между обычной и раненой локомоцией

Переключение между обычным и раненым состоянием

В конце используется Blend Poses by Bool.

Переменная IsDamage проходит через NOT:

  • когда IsDamage = False, результат NOT равен True, поэтому используется обычная поза BaseAnim;
  • когда IsDamage = True, результат становится False, поэтому включается раненая поза с процедурными изменениями таза и ног.

( эту нода становится True когда персонаж получает урон)

Переход к обычной позе занимает 0.4 секунды, а переход к раненой — 1.0 секунду.

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

Важный момент: лучше ставить эти ноды перед Slot Montage, а не после него. Иначе часть анимации может «съедаться».

Идём дальше. Теперь настроим аддитивные позы.

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Здесь поверх базовой анимации накладываются две Mesh Space Additive анимации:

Здесь поверх базовой анимации накладываются две Mesh Space Additive анимации:

  • первая включается при IsDamage;
  • вторая — только когда персонаж ранен и движется.

Так поза раненого персонажа дополнительно меняется во время движения

Первая поза сгибает персонажа , вторая делает его ноги шире

ИЗМЕНЕНИЕ СКОРОСТИ

Теперь настроим скорость перемещения персонажа , чтобы когда он получил -двигался медленнее , Идем в Blueprint персонажа

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Проверяется переменная IsDamage.

  • Если персонаж не ранен, используется обычный расчёт скорости через Calculate Max Speed.
  • Если персонаж получил урон, система обращается к компоненту Character Movement и меняет его параметр Max Walk Speed на 200.

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

Character Movement компонент, который управляет движением персонажа.

Max Walk Speed максимальная скорость его ходьбы и бега по земле.

мы по сути когда получаем ранение меняем параметр Max Walk Speed , а потом возвращаемся его обратно каким он был

Коррекция длины шага

Используем ноду Stride Warping для того что бы скорректировать длину шага под новую скорость , видео без ноды и с нодой

Конечно не стоит ждать у вас скорость бега был 600 и вы поставили 100 - что все будет идеально

Stride Warping включается только тогда, когда персонаж ранен (IsDamage) и движется (Is Moving). В ноду передаётся текущая скорость Speed 2D, на основе которой система процедурно меняет длину шага. Это помогает согласовать анимацию с уменьшенной скоростью персонажа и снизить скольжение стоп.

Результат ограничивается диапазоном от 0 до 1 и плавно интерполируется со скоростью 10, чтобы длина шага не менялась рывками. Включение и выключение эффекта также сглаживается за 0,4

Логика включения ноды ISDamage

Когда персонаж получает урон мы вызываем событие Wounded

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом
Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом
  1. Событие Wounded включается при получении урона.
  2. Переменная IsDamage становится True персонаж считается раненым.
  3. Wounded Stamina сбрасывается до 0.
  4. Запускается циклический таймер, который постоянно вызывает событие Relax. Его ссылка сохраняется в Timer Wounded.
  5. В Relax значение Wounded Stamina плавно восстанавливается от текущего значения до 100 через FInterp To.
  6. Скорость восстановления задаёт Wounded Interp Speed, а Get World Delta Seconds делает восстановление независимым от FPS.
  7. Когда Wounded Stamina становится больше 95, таймер останавливается.
  8. После этого IsDamage переключается в False, и персонаж выходит из раненого состояния.

ПРОЩЕ говоря , эта логика отвечает за то насколько долго персонаж будет бегать раненым , так как мы можем контролировать скорость восстановления Wounded Stamina через эту переменную

Как превратить обычный бег в раненую походку в Unreal Engine заставляем персонажа хромать вместе со скуфом

Значение переменной IsDamage мы передаём в Animation Blueprint. После получения урона персонаж проигрывает аддитивные позы, а скорость его движения снижается. Когда персонаж восстанавливает стамину, аддитивные позы отключаются.

ИТОГО

В статье мы разобрали, как создать процедурное состояние раненого персонажа: смешать базовую локомоцию с раненой анимацией через Layered Blend per Bone, добавить аддитивные позы и процедурно изменить таз и шаги с помощью Transform (Modify) Bone и Sync Markers. Затем мы уменьшили скорость через Character Movement, скорректировали длину шага с помощью Stride Warping и настроили восстановление персонажа через Wounded Stamina. Вся система включается и выключается переменной IsDamage

86
11
8
4
1
1