Процедурная анимация шага в Unreal: оживляем «робо-штаны» — Game Design Radar
← Все посты

Процедурная анимация шага в Unreal: оживляем «робо-штаны»

14.12.2025
Процедурная анимация шага в Unreal: оживляем «робо-штаны»

Автор начинает серию о процедурной локомоции на примере «робо-брюк» в Unreal Engine, фокусируясь на базовой физичности движения и подготовке анимационного пайплайна.

Базовое движение Pawn’а

В Tick актору задаются позиция и поворот по Yaw. Для сглаживания и физичности используется метод DampSpring (ранее описан в статье про Trailing Joints) и эмпирическое правило 4/T для коэффициента трения. Нормализованная скорость (NormalizedSpeed) масштабирует DeltaTime при обновлении поворота, чтобы поведение оставалось стабильным при разных скоростях.

На базе C++ класса создаётся Blueprint-ребёнок с нужными ассетами и камерой на spring-arm. На этом этапе движение и камера уже работают, но модель жёсткая — нет вторичной анимации.

Ментальная модель ходьбы

Автор опирается на классическую схему (по Уильямсу):

  • Наклон вперёд и инициирование «падения»
  • Выставление ноги вперёд для опоры (ключ «contact»)
  • Отталкивание вверх и перенос задней ноги (ключ «passing»)
  • Повтор цикла

В первой части реализуется только «наклон» и работа таза, без явных шагов.

Наклон корпуса при ускорении

Направление наклона вычисляется как векторное произведение «вверх» × «ускорение», что даёт корректную ось вращения. Наклон усиливается коэффициентом LeanMulti и ограничивается MaxLeanAngle. Чтобы убрать резкость, применяется low-pass фильтр на кватернионе: вспомогательная структура FDampedQuat использует DampSpring для сглаживания поворота за LeanSmoothingSeconds.

В Tick сначала обновляется сглаженный наклон, затем итоговый поворот считается как SmoothLean.Value * FRotator(0, Yaw, 0) (наклон в мировом пространстве, поэтому умножение слева). Уже один этот эффект делает движение более физичным: персонаж «ловит» себя при остановке.

Настройка Animation Blueprint

Далее подключается анимационная часть через Animation Blueprint, используя стандартные AnimNodes Unreal (в т.ч. Two Bone IK для ног). Автор описывает конвенцию построения графа «сверху-вниз, слева-направо» для читабельности.

В Blueprint вводятся четыре публичных параметра:

  • LeftFootPos — позиция левой стопы в пространстве компонента
  • RightFootPos — позиция правой стопы
  • HipOffset — смещение таза
  • HipRotation — дополнительный поворот таза

Пайплайн справа в графе:

  1. Берётся ref pose в mesh-space (сюда можно подмешивать «key-poses» как в Overgrowth или стойки, как делалось в Solar Ash для больших персонажей).
  2. Через Modify Bone применяется HipOffset и HipRotation к тазу.
  3. IK-ноды для ног (Two Bone IK) доводят стопы до LeftFootPos/RightFootPos.

Параметры можно тестировать в Anim Preview Editor, вручную двигая HipOffset и наблюдая позу.

Связка C++ и Animation Blueprint

В C++ классе Pawn’а объявляются дублирующие BlueprintReadOnly поля:

  • FVector FootPosL / FootPosR
  • FVector HipOffset
  • FRotator HipRotation

Они служат выходами в Animation Instance. Дублирование нужно, потому что анимации считаются на фоновых потоках и не могут напрямую читать данные из игрового потока. Это также позволяет нескольким акторам использовать один и тот же аним-граф. На уровне команды этот «handshake» в Blueprint Update чётко разделяет зоны ответственности геймплея и теханимации.

Коррекция стоп и движения таза

В BeginPlay сохраняются позы покоя стоп (FootRestPosL/FootRestPosR) из текущих FootPosL/FootPosR. Далее, при наклоне, логика сдвигает таз и стопы так, чтобы ноги визуально оставались на земле (в примере без raycast’ов, в реальной игре опору определяли бы трассировками).

Движение таза модулируется:

  • амплитуда зависит от силы наклона стика (через low-pass фильтр, как и наклон);
  • фаза синусоиды зависит от NormalizedSpeed: чем выше скорость, тем выше частота;
  • добавляется «качание» таза роллом с половинной частотой для лево-право-лево-право ритма.

Даже без явных шагов это уже создаёт узнаваемую «походку» и характер движения.

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

Выводы

  • Используйте физически мотивированные наклоны (ось = up × acceleration) и сглаживание (DampSpring/low-pass) для живого движения.
  • Разделяйте игровую логику и анимацию через параметры Animation Blueprint, учитывая многопоточность.
  • Стройте пайплайн: ref pose → модификация таза → IK для ног, управляя всем из C++ параметрами позы.
  • Даже простая синусоида для таза, зависящая от скорости и ввода, уже придаёт походке ритм и «личность».
  • Сначала реализуйте наклон и вторичное движение, а уже потом добавляйте явные шаги и контакты стоп.
check_circle Факт-чекинг
Статья прошла проверку. Фактологических ошибок не выявили.
sports_esports Упомянутые игры