Animation Blueprint в Unreal Engine

Animation Blueprint

Animation Blueprint в Unreal Engine — это специализированный Blueprint, предназначенный для управления анимацией Skeletal Mesh (чаще всего персонажа). Он отвечает за переключение анимаций (например, Idle, Walk, Run, Jump и других), их плавное смешивание, работу со State Machine и Blend Space, а также за более сложные анимационные задачи — например, реализацию IK (обратной кинематики) или процедурных корректировок позы.

Также рекомендую скачать мою бесплатную книгу по Blueprint для Unreal Engine.

Основная цель книги — дать общий, целостный и понятный обзор системы Blueprint. Книга предлагает взгляд с высоты «птичьего полёта» — ясную и чёткую карту игрового мира Unreal Engine, которая поможет увидеть ключевые взаимосвязи и понять, как устроена система визуального скриптинга.

Зарегистрироваться в ЛК и скачать книгу [Blueprints. Взгляд с высоты «птичьего полёта»]

Проще говоря, Animation Blueprint определяет, какая анимация должна воспроизводиться в текущий момент и при каких условиях происходит её смена. Он формирует итоговую позу персонажа в каждом кадре игры.

Важно понимать, что Animation Blueprint не управляет движением персонажа и не содержит основной игровой логики. Он лишь визуально отображает состояние персонажа.

Создание и подключение Animation Blueprint

Создаётся Animation Blueprint через контекстное меню Content Browser или же через его кнопку Add далее Animation / Animation Blueprint.

Animation Blueprint создаётся через контекстное меню или кнопку Add в Content Browser / Animation Blueprint
Animation Blueprint создаётся через контекстное меню или кнопку Add в Content Browser / Animation Blueprint

В процессе создания Animation Blueprint также необходимо выбрать Skeleton, к которому он будет привязан. Это важно, поскольку анимационный Blueprint может работать только с тем скелетом, для которого он создаётся, и использовать анимации, совместимые с ним.

В процессе создания Animation Blueprint также необходимо выбрать Skeleton, к которому он будет привязан
В процессе создания Animation Blueprint также необходимо выбрать Skeleton, к которому он будет привязан

После создания задаётся имя ассета. По принятой практике в названии используется префикс AnimBP или ABP, например ABP_Unarmed.

Чтобы Animation Blueprint начал управлять анимацией персонажа, его необходимо назначить в настройках компонента Skeletal Mesh: в разделе Details / Animation / Animation Mode выбрать режим Use Animation Blueprint, после чего в поле Anim Class указать созданный Animation Blueprint.

Выбор режима Use Animation Blueprint в настройках компонента Skeletal Mesh, позволяющий назначить анимационный Blueprint ABP_Unarmed, который автоматически определяет и воспроизводит нужную анимацию в зависимости от текущего состояния персонажа (скорости, движения, прыжка и других параметров)
Выбор режима Use Animation Blueprint в настройках компонента Skeletal Mesh, позволяющий назначить анимационный Blueprint ABP_Unarmed, который автоматически определяет и воспроизводит нужную анимацию в зависимости от текущего состояния персонажа (скорости, движения, прыжка и других параметров)

С этого момента вся логика выбора и смешивания анимаций будет выполняться внутри Animation Blueprint, а Skeletal Mesh будет получать и отображать рассчитанную им финальную позу.

Редактор Animation Blueprint

При открытии созданного Animation Blueprint откроется соответствующий редактор, состоящий из нескольких основных частей:

  1. Toolbar (верхняя панель инструментов) — содержит кнопки Compile (компиляция), Save (сохранение), Play (запуск), Debug (отладка) и другие быстрые действия.
  2. Viewport / Preview — окно предпросмотра персонажа с анимацией.
  3. My Blueprint — список логических элементов блюпринта: Variables (переменные), Functions (функции), Macros (макросы), Dispatchers (диспетчеры), анимационные графы и графы событий. Позволяет создавать логические элементы для управления анимацией.
  4. Graph Editor — основная рабочая область. Состоит из:
    — Event Graph — логика обновления (например, скорость, состояние персонажа).
    — Anim Graph — отвечает за выбор и смешивание анимаций (State Machine, Blend Space и т.д.), а также за финальную позу персонажа.
  5. Details Panel — показывает свойства выбранного узла, переменной или анимации. Здесь настраиваются параметры.
  6. Asset Browser — список доступных анимаций, Blend Space, Montage и других ассетов анимаций для использования в графе.
  7. Переключение связанных ассетов (верхний правый угол) — набор кнопок для быстрого перехода к связанным ассетам текущего скелета: Skeleton, Skeletal Mesh, Physics Asset и другие связанные ассеты. Используется для удобной навигации между всеми ресурсами, работающими с одним и тем же скелетом.
Редактор Animation Blueprint
Редактор Animation Blueprint

Graph Editor в Animation Blueprint — это основная рабочая область, где создаётся вся логика работы анимации для Skeletal Mesh. Он включает два ключевых раздела: Event Graph и Anim Graph. Они выполняют разные задачи, но работают совместно каждый кадр обновления анимации.

Event Graph

Event Graph в Animation Blueprint предназначен для вычисления и обновления переменных, которые описывают текущее состояние персонажа. Эти переменные затем используются в Anim Graph для выбора, переключения и смешивания анимаций. Таким образом, Event Graph отвечает не за саму анимацию, а за подготовку данных, на основании которых Anim Graph принимает решения.

Event Graph в Animation Blueprint
Event Graph в Animation Blueprint

Основная его логика работы заключается в следующем: каждый кадр Animation Blueprint получает информацию о состоянии персонажа — его скорости, направлении движения, нахождении в воздухе, приседании, атаке и других параметрах. Эти данные преобразуются в переменные внутри Animation Blueprint (например, GroundSpeed, IsFalling).

Сохранение в переменной IsFalling данных о том, падает ли персонаж
Сохранение в переменной IsFalling данных о том, падает ли персонаж

Затем Anim Graph использует их в условиях переходов между состояниями State Machine и в узлах смешивания. Когда значение переменной изменяется, условия перехода становятся истинными или ложными, и анимация автоматически переключается.

Использование переменной IsFalling для проверки состояния персонажа (перестал ли он падать) как сигнала для перехода анимации падения к анимации приземления
Использование переменной IsFalling для проверки состояния персонажа (перестал ли он падать) как сигнала для перехода анимации падения к анимации приземления

Ключевые ноды в Event Graph

Event Blueprint Initialize Animation

Одной из ключевых нод в Event Graph является нода Event Blueprint Initialize Animation.

Событие Event Blueprint Initialize Animation
Событие Event Blueprint Initialize Animation

Событие Event Blueprint Initialize Animation вызывается один раз в момент инициализации Animation Blueprint — когда анимация привязывается к скелетному мешу персонажа. В этом событии обычно получают ссылку на владельца анимации через Get Owning Actor, выполняют приведение типа (Cast) к классу конкретного персонажа и сохраняют эту ссылку в переменную. Это позволяет в дальнейшем обращаться к данным персонажа без повторного выполнения Cast каждый кадр.

Event Blueprint Update Animation

Главным рабочим событием является Event Blueprint Update Animation.

Событие Event Blueprint Update Animation
Событие Event Blueprint Update Animation

Событие Event Blueprint Update Animation вызывается каждый кадр обновления анимации. Именно здесь происходит расчёт всех переменных состояния. Обычно в этом событии проверяют наличие ссылки на персонажа, получают его текущую скорость через компонент движения, вычисляют длину вектора Velocity для определения значения Speed, проверяют состояние падения через функцию IsFalling, а также обновляют другие логические флаги. Все вычисленные значения сохраняются в переменные Animation Blueprint. После этого Anim Graph автоматически использует обновлённые данные для определения нужной анимации.

Get Owning Actor

Еще одной важной нодой в Event Graph внутри Animation Blueprint является нода Get Owning Actor.

Get Owning Actor
Get Owning Actor

Нода Get Owning Actor возвращает Актор, которому принадлежит данный Animation Blueprint. Чаще всего это объект класса Character. Через него можно получить доступ к компоненту движения, игровым переменным и функциям персонажа. Обычно ссылка на владельца сохраняется во время события Event Blueprint Initialize Animation и затем используется в Update Animation для чтения данных.

В итоге работа строится по следующему принципу: при инициализации анимации получаем ссылку на персонажа; каждый кадр обновляем переменные состояния в Event Graph; Anim Graph анализирует эти переменные и при их изменении переключает или смешивает анимации. Таким образом достигается разделение вычисления состояния и визуального представления анимации.

Пример сохранения и обновления данных в Event Graph

Рассмотрим пример организации вычисления, сохранения и обновления данных в Event Graph на основе стандартного шаблона проекта от третьего лица в Unreal Engine (версия 5.7).

В данном проекте анимация персонажа реализована через Animation Blueprint, расположенный по пути: /Game/Characters/Mannequins/Anims/Unarmed. Ассет называется ABP_Unarmed.

Открыв этот ассет и перейдя на вкладку Event Graph, можно увидеть, что при срабатывании события Event Blueprint Initialize Animation происходит первичная настройка Animation Blueprint.

Во время инициализации по событию Event Blueprint Initialize Animation:

  1. С помощью ноды Get Owning Actor получается владеющий Актор — то есть персонаж, к которому привязан данный Animation Blueprint.
  2. Выполняется приведение типа (Cast) к классу Character.
  3. Сохраняется ссылка на персонажа.
  4. Дополнительно сохраняется ссылка на его компонент движения Character Movement.
Устанавливаем ссылки на владеющего персонажа при инициализации данного Animation Blueprint по событию Event Blueprint Initialize Animation
Устанавливаем ссылки на владеющего персонажа при инициализации данного Animation Blueprint по событию Event Blueprint Initialize Animation

Таким образом, Animation Blueprint получает прямой доступ к данным персонажа и его системе перемещения. Эти ссылки сохраняются один раз при инициализации, чтобы в дальнейшем не выполнять Cast каждый кадр, что положительно влияет на производительность.

Далее, в событии Event Blueprint Update Animation, которое вызывается на каждом кадре, происходит обновление состояния переменных. На основе сохранённых ссылок на Character и Character Movement вычисляются и обновляются следующие переменные:

  1. Velocity — вектор скорости персонажа (направление и величина движения).
  2. Ground Speed — скалярная скорость движения по поверхности (обычно длина вектора Velocity без учёта вертикальной составляющей).
  3. ShouldMove — логическая переменная, определяющая, движется ли персонаж.
  4. IsFalling — логическая переменная, показывающая, находится ли персонаж в состоянии падения.
  5. Direction — угол направления движения относительно ориентации персонажа.
Обновление состояния переменных по событию Event Blueprint Update Animation
Обновление состояния переменных по событию Event Blueprint Update Animation

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

Все перечисленные переменные затем используются во вкладке Anim Graph. Они участвуют в:

  • условиях переходов между состояниями State Machine,
  • управлении Blend Space,
  • выборе и смешивании анимаций.

Таким образом, Event Graph выполняет роль вычислительного слоя: он собирает и обновляет данные о состоянии персонажа, а Anim Graph на их основе формирует итоговую анимацию.

Anim Graph

Anim Graph в Animation Blueprint — это ключевая часть системы анимации в Unreal Engine, которая отвечает за формирование финальной позы персонажа каждый кадр. В отличие от Event Graph, который вычисляет переменные, например, такие как скорость движения, нахождение в воздухе или состояние атаки, Anim Graph использует эти данные для выбора, смешивания и модификации анимаций. Это позволяет создавать плавную и реалистичную итоговую позицию скелета персонажа. Такое разделение увеличивает читаемость и эффективность работы анимационной системы.

Anim Graph в Animation Blueprint
Anim Graph в Animation Blueprint

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

Важно понимать, что Anim Graph выполняется каждый кадр, постоянно перерасчитывая итоговую позицию костей на основе текущих входных данных и логики.

В основе любого Anim Graph всегда находится узел Output Pose. Это финальный выход графа. Вся цепочка узлов — проигрыватели анимаций, переходы, смешивания и дополнительные вычисления — в итоге должна быть подключена к этому узлу. Именно та поза, которая приходит в Output Pose, передаётся владельцу Animation Blueprint, то есть компоненту Skeletal Mesh, и отображается на персонаже в текущем кадре. Если какая-либо логика не приводит к Output Pose, она не повлияет на итоговую анимацию.

Узел Output Pose
Узел Output Pose

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

Sequence Player — проигрыватель анимаций

Sequence Player — это проигрыватель анимационной последовательности. Он воспроизводит конкретную анимацию и выдаёт позу на выход.

Sequence Player
Sequence Player

В его настройках во вкладке Details можно выбрать саму анимацию (Sequence), задать скорость воспроизведения (Play Rate), указать начальную позицию проигрывания (Start Position) и включить или отключить зацикливание (Loop Animation).

Sequence Player: настройки Details
Sequence Player: настройки Details

Эти параметры можно задавать во вкладке Details или же вывести на граф в виде пинов через опцию Expose as Pin.

Включение опции Expose as Pin
Включение опции Expose as Pin

Если подключить Sequence Player напрямую к Output Pose, персонаж будет проигрывать только одну анимацию без какой-либо логики переключения.

Узел Sequence Player, подключенный напрямую к Output Pose
Узел Sequence Player, подключенный напрямую к Output Pose

Blend — смешивание разных анимаций

Для переключения и комбинирования анимаций в Anim Graph используются узлы категории Blend. Их основная задача — смешивать две и более позы различными способами. На вход такие узлы принимают минимум две позы, а на выходе выдают одну итоговую позу.

Узлов категории Blend существует множество. Все они предназначены для разных задач, но принцип у них общий — объединение (смешение) анимаций по заданным условиям. Рассмотрим самые часто используемые.

Blend Poses by Bool

Узел Blend Poses by Bool смешивает две позы — True Pose и False Pose — в зависимости от логического значения.

Например, если в качестве условия использовать переменную скорости, то при наличии движения будет проигрываться анимация ходьбы или бега, а при отсутствии — анимация покоя. На рисунке ниже логическая переменная Should Move возвращает True, если персонаж движется, и False, если нет. Соответственно, Blend Poses by Bool будет проигрывать позу True Pose (анимацию ходьбы), если персонаж движется, если же персонаж стоит, то проигрываться будет поза False Pose (анимация покоя).

Принцип работы узла Blend Poses by Bool
Принцип работы узла Blend Poses by Bool

Также узел Blend Poses by Bool для каждой позы имеет параметры Blend Time, позволяющие задать время смешивания текущей анимации с предыдущей.

Blend Poses by Enum

Другой распространённый вариант — смешивание по перечислению.

Blend Poses by Enum — выбирает позу в зависимости от значения перечисления. Например, если в Event Graph установлена переменная-перечисление TypeMove со значениями Walk, Jog, то в Anim Graph можно подключить разные анимации к соответствующим входам узла Blend Poses by Enum. В зависимости от текущего режима движения будет проигрываться соответствующая анимация.

Принцип работы узла Blend Poses by Enum
Принцип работы узла Blend Poses by Enum

Layered Blend Per Bone

Отдельно стоит выделить узел смешивания анимаций по костям.

Layered Blend Per Bone — позволяет смешивать анимации по определённым костям. Итоговая поза формируется частично из одной анимации и частично из другой. В настройках (Details / Layer Setup / Index / Branch Filter) указывается кость, с которой начинается смешивание (Bone Name), а также глубина смешивания (Blend Depth). Если глубина равна нулю, вторая анимация применяется сразу с указанной кости. Если задано положительное значение, создаётся постепенный переход по иерархии костей. Такой подход часто используется, например, когда нижняя часть тела выполняет анимацию ходьбы или бега, а верхняя — анимацию стрельбы.

На рисунке ниже в узле Layered Blend Per Bone в качестве базовой позы указана анимация ходьбы без оружия, но, начиная с кости spine_01, к основной позе примешивается анимация удержания пистолета в состоянии покоя. Как итоговая поза получается анимация ходьбы с удержанием пистолета.

Принцип работы узла Layered Blend Per Bone
Принцип работы узла Layered Blend Per Bone

Другие узлы смешивания

  • Blend — простейшее смешивание двух поз с управлением степенью смешивания через параметр Alpha (0..1).
  • Blend Bone by Channel — позволяет задать смешивание трансформаций (положение, поворот, масштаб) по отдельным костям. Можно отдельно контролировать, какие каналы трансформации участвуют в смешивании. Позволяет смешивать анимации, влияющие на разные части тела, с точной настройкой.
  • Blend Multi — используется для смешивания более двух поз с использованием множества весов Alpha.
  • Blend Poses by Int — позволяет выбирать и смешивать несколько поз на основе переменной типа int.

В итоге все узлы смешивания в Anim Graph работают по одному принципу: они получают несколько поз на входе и выдают итоговую позу на выходе. Поэтому их можно комбинировать между собой. Например, несколько Sequence Player могут воспроизводить базовые анимации, затем их результат смешивается через узлы Blend, после чего поза, например, может дополнительно обрабатываться через Layered Blend Per Bone. В конце вся эта цепочка должна быть обязательно подключена к Output Pose.

Специализированные узлы Anim Graph

Помимо базовых узлов проигрывания анимаций и смешивания поз, в Anim Graph существует ряд специализированных узлов, предназначенных для решения более сложных задач: для работы с Animation Montage, процедурной анимации, управления направлением взгляда и прицеливания, а также параметрического смешивания анимаций. Рассмотрим наиболее важные из них.

Slot

Slot — узел используется для воспроизведения Animation Montage внутри Anim Graph.

Узел Slot, предназначенный для встраивания Animation Montage поверх текущей анимации
Узел Slot, предназначенный для встраивания Animation Montage поверх текущей анимации

Animation Montage — это специальный тип анимации, который применяется для отдельных действий персонажа, таких как атака, перезарядка оружия, получение урона или взаимодействие с объектами. Узел Slot работает как точка подключения Montage к текущей позе персонажа. Сначала в Anim Graph формируется базовая поза, например анимация движения персонажа (Idle, Walk, Run). Эта поза подается на вход Slot. Если в данный момент проигрывается Animation Montage, он перекрывает текущую позу. Если же Montage не активен, Slot просто пропускает входящую позу дальше без изменений.

Каждый Slot имеет имя, которое должно совпадать с именем слота, указанным внутри Montage. Нередко Slot используется совместно с узлом Layered Blend Per Bone, чтобы накладывать анимацию Montage только на определённую часть тела, например на верхнюю часть тела при стрельбе или перезарядке.

Apply Additive

Apply Additive и Apply Mesh Space Additive — узлы Anim Graph, предназначенные для наложения аддитивных анимаций поверх базовой позы персонажа.

Узлы наложения аддитивных анимаций Apply Additive и Apply Mesh Space Additive
Узлы наложения аддитивных анимаций Apply Additive и Apply Mesh Space Additive

Аддитивная анимация хранит не полную позу, а разницу относительно базовой позы. При применении такой анимации она не заменяет текущую анимацию, а добавляет к ней дополнительные движения. Это позволяет накладывать вторичные эффекты, такие как дыхание, отдача оружия, лёгкие наклоны корпуса или колебания камеры.

Узел Apply Additive накладывает аддитивную анимацию в Local Space (локальном пространстве костей), а Apply Mesh Space Additive выполняет ту же функцию, но применяет аддитивную анимацию в Mesh Space (пространстве всего скелета). Такой способ используется в ситуациях, когда важна ориентация всей модели, например при системах Aim Offset или при поворотах верхней части тела.

Blend Space

Blend Space представляет собой специальный анимационный ресурс, позволяющий плавно смешивать несколько анимаций на основе одного или нескольких параметров. Чаще всего он используется в системах локомоции персонажа. Например, персонаж может иметь анимации Idle, Walk и Run. В Blend Space эти анимации располагаются в координатном пространстве, где осью может быть параметр скорости. В зависимости от значения скорости система автоматически смешивает ближайшие анимации, создавая плавный переход между ними.

В Anim Graph для работы с таким ресурсом используется узел Blend Space Player. Он принимает параметры, например скорость и направление движения, и возвращает итоговую позу, полученную в результате смешивания анимаций. Существует два основных типа Blend Space: одномерный (1D), использующий один параметр, например, скорость, и двумерный (2D), использующий два параметра, например скорость и направление движения.

Узел Blend Space Player, проигрывающий анимацию Blend Space
Узел Blend Space Player, проигрывающий анимацию Blend Space

Aim Offset

Специализированным вариантом Blend Space является Aim Offset Blend Space, предназначенный для управления направлением прицеливания или взгляда персонажа.

Узел Aim Offset Blend Space проигрывающий анимацию Aim Offset
Узел Aim Offset Blend Space проигрывающий анимацию Aim Offset

Aim Offset содержит набор поз, соответствующих различным направлениям — вверх, вниз, влево, вправо и прямо. На основе входных параметров, обычно углов Pitch (наклон вверх или вниз) и Yaw (поворот влево или вправо), система смешивает соответствующие позы и формирует итоговую анимацию. Чаще всего Aim Offset применяется поверх базовой анимации движения в виде аддитивной анимации.

Control Rig

Для более сложной и динамической анимации используется узел Control Rig, позволяющий применять процедурную анимацию непосредственно внутри Anim Graph.

Узел Control Rig, применяющий процедурную анимацию для изменения положения стоп персонажа
Узел Control Rig, применяющий процедурную анимацию для изменения положения стоп персонажа

Control Rig предоставляет возможность программно управлять трансформациями костей скелета. С его помощью можно реализовывать системы обратной кинематики, корректировать положение рук и ног, адаптировать анимацию к окружающей среде или реализовывать дополнительные процедурные движения. Control Rig получает позу на входе, выполняет внутри собственного графа вычисления, связанные с трансформацией костей, и возвращает изменённую позу обратно в Anim Graph. Таким образом можно комбинировать заранее записанные анимации и процедурные корректировки.

Transform (Modify) Bone

Узел Transform (Modify) Bone
Узел Transform (Modify) Bone

Также в Anim Graph существует ряд узлов, позволяющих напрямую работать с трансформациями костей. Например, узел Transform (Modify) Bone позволяет изменять положение, вращение или масштаб выбранной кости. Он может использоваться для наклона персонажа при движении, поворота головы или динамического изменения положения оружия.

Two Bone IK

Для работы с конечностями часто применяются узлы инверсной кинематики. Один из наиболее распространённых — Two Bone IK.

Узел Two Bone IK
Узел Two Bone IK

Two Bone IK используется для управления костями скелета, например плечо–локоть–кисть или бедро–колено–стопа. Этот узел позволяет задать целевую точку, к которой должна тянуться конечность. Two Bone IK широко используется для корректировки положения ног на поверхности, удержания рук на оружии или взаимодействия персонажа с объектами.

Таким образом, Anim Graph предоставляет широкий набор специализированных узлов для решения различных задач анимации. Одни узлы отвечают за проигрывание анимаций, другие — за их смешивание, третьи — за наложение дополнительных анимационных слоев или процедурную корректировку позы. Комбинируя такие узлы, как Sequence Player, Blend Space, Aim Offset, Slot, Layered Blend Per Bone, Control Rig и IK-системы, можно создавать сложные и гибкие системы анимации, которые динамически реагируют на состояние персонажа, его движения, взаимодействие с окружением и другие игровые параметры.

State Machine

Хотя выбор конкретной анимации для текущего кадра можно осуществлять напрямую в Anim Graph с помощью разнообразных Blend-нод, для сложных и реалистичных анимационных систем такой подход оказывается неэффективным и неудобным.

Во-первых, в сложных персонажах может насчитываться сотни разных анимаций, и создание больших разветвленных деревьев условий при помощи только Blend-нод приводит к путанице и потере контроля над логикой. Отслеживать взаимосвязи и правильно управлять условными переходами становится крайне сложно.

Во-вторых, Blend-ноды работают в режиме постоянного, двунаправленного смешивания — при изменении условия анимация мгновенно меняется на другую, а при обратном изменении условия возвращается обратно. Однако в реальных сценариях часто требуется более точный контроль: например, при изменении условия не возвращаться в прежнее состояние, а перейти в другое, или не изменять анимацию вообще, пока не произойдет определённое событие. Такие сценарии сложно реализовать через простые Blend-ноды.

Для решения этих проблем в Unreal Engine используется инструмент State Machine (машина состояний) — специализированная структура в рамках Animation Blueprint, позволяющая управлять анимациями через определённые дискретные состояния с односторонними и чётко контролируемыми переходами между ними.

Редактор машины состояний State Machine
Редактор машины состояний State Machine

Основная идея State Machine

  1. Всё поведение персонажа разделяется на логические дискретные состояния, например: Idle (покой), Locomotion (движение), Jump Start (начало прыжка), Falling (падение), Landing (приземление), Attack (атака) и другие.
Состояния Idle и Walk / Run в State Machine
Состояния Idle и Walk / Run в State Machine
  1. Каждое состояние представляет собой отдельный узел внутри машины состояний и инкапсулирует собственную анимационную логику. По своей структуре оно работает так же, как обычный Anim Graph: внутри используются Sequence Player, Blend Space, Blend-ноды и другие инструменты для воспроизведения и смешивания анимаций. Разница в том, что вся эта логика ограничена рамками конкретного состояния и формирует итоговую позу именно для данного этапа поведения персонажа. Завершается состояние обязательным узлом Output Animation Pose, который определяет финальную позу персонажа в каждом кадре, пока активно это состояние.
Логика состояния Idle
Логика состояния Idle
  1. Переход между состояниями возможен только при наличии явно заданного правила — Transition Rule. Если правило не создано, переход невозможен. Переходы являются односторонними: при переходе из состояния A в состояние B персонаж остаётся в состоянии B до тех пор, пока не выполнится условие другого перехода. Обратный переход требует отдельного явно заданного правила. Это обеспечивает чёткий и контролируемый поток анимаций и предотвращает нежелательные автоматические возвраты.
Односторонние переходы от состояния Idle к состоянию Walk / Run и от состояния Walk / Run к состоянию Idle
Односторонние переходы от состояния Idle к состоянию Walk / Run и от состояния Walk / Run к состоянию Idle
  1. Каждый Transition Rule содержит собственный граф с логическим условием и обязательным конечным узлом Result, который определяет итог True/False (есть переход или нет). Внутри правила можно использовать переменные из Event Graph, проверки значений (например, Speed > 0), логические флаги (IsInAir), а также время проигрывания текущей анимации.
Логика, определённая в правиле перехода от состояния Idle к состоянию Walk / Run: если переменная Should Move равна значению True (персонаж движется) — сделать переход к состоянию Walk / Run
Логика, определённая в правиле перехода от состояния Idle к состоянию Walk / Run: если переменная Should Move равна значению True (персонаж движется) — сделать переход к состоянию Walk / Run

Использование State Machine упрощает организацию сложных анимационных систем за счёт модульности, повышает читаемость, облегчает отладку и поддержку проекта. Кроме того, оно даёт возможность задавать длительные переходы, условия ожидания, а также создавать вложенные машины состояний для ещё более гибкого управления и масштабируемости анимаций.

Машина состояний Locomotion, встроенная в общую машину состояний Main States
Машина состояний Locomotion, встроенная в общую машину состояний Main States

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

Создание State Machine

Для создания State Machine откройте Anim Graph текущего Animation Blueprint, вызовите контекстное меню правой кнопкой мыши, найдите и добавьте узел State Machine. Соответствующая нода появится на графе.

Добавление узла State Machine на график Anim Graph
Добавление узла State Machine на график Anim Graph

После добавления рекомендуется задать ноде понятное и осмысленное имя, отражающее её назначение. Например, Locomotion — управление передвижением персонажа.

State Machine имеет один выходной пин — итоговую позу, сформированную логикой внутри машины состояний. Эту позу можно передать другим узлам обработки поз (например, Blend Poses, Layered Blend Per Bone) или напрямую подключить к финальному выходу Anim GraphOutput Pose.

Машина состояний Locomotion, подключенная к Output Pose текущего Anim Graph
Машина состояний Locomotion, подключенная к Output Pose текущего Anim Graph

 

Граф State Machine и ее узлы

Чтобы открыть граф машины состояний, дважды кликните по ноде State Machine. Внутри графа находится стартовая нода Entry — точка входа в машину состояний. При запуске анимационного Blueprint выполнение происходит именно от неё.

Стартовая нода Entry в State Machine
Стартовая нода Entry в State Machine

В контекстном меню графа доступны три ключевых типа нод: Add State, Add Conduit и Add State Alias.

Контекстное меню State Machine
Контекстное меню State Machine
  1. State — состояние, основная нода машины состояний. Каждое состояние представляет состояние анимации персонажа, например: Idle, Walk, Run. Количество состояний не ограничено. Каждому следует давать понятное и логичное имя.
Добавленные в State Machine состояния Idle и Walk
Добавленные в State Machine состояния Idle и Walk

Внутри каждого State расположен собственный Anim Graph, описывающий логику формирования позы: какую анимацию воспроизводить, как смешивать анимации с помощью Blend Nodes, Sequence Player, Blend Space и других элементов.

Все узлы внутри State формируют единую цепочку обработки позы. Результат подключается к Output Animation Pose — выходу состояния, возвращающему итоговую позу обратно в State Machine. Она затем используется при переходах и смешивании с другими состояниями.

Логика анимаций внутри состояния Land, представленная одним узлом Sequence Player, проигрывающая анимацию приземления
Логика анимаций внутри состояния Land, представленная одним узлом Sequence Player, проигрывающая анимацию приземления
  1. Conduit — вспомогательный логический узел. Он упрощает сложную логику переходов, когда из одного состояния есть несколько направлений переходов или требуется общая проверка условий. Сначала выполняется проверка внутри Conduit, после чего происходит переход в конкретное состояние. Это устраняет дублирование условий в переходах.
Нода Conduit в State Machine
Нода Conduit в State Machine
  1. State Alias — специальная нода для ссылки сразу на несколько состояний. Она облегчает структуру графа, сокращает количество пересекающихся переходов и позволяет переиспользовать состояния. Alias не содержит собственной логики — он просто ссылается на состояния, указанные в Details. Например, чтобы перейти в состояние Jump из Locomotion и из Land, нужно создать два перехода: от Locomotion к Jump и от Land к Jump.
Два перехода в состояние Jump
Два перехода в состояние Jump

Можно вместо этого создать Alias, например To Jump, и в его настройках указать состояния Locomotion и Land. Тогда достаточно создать одну связь — от To Jump к Jump.

Наличие одной связи при использовании Alias "To Jump"
Наличие одной связи при использовании Alias «To Jump»

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

Transitions — переходы между состояниями

Состояния внутри State Machine соединяются односторонними переходами (Transitions). Чтобы создать переход, подведите курсор к краю состояния, нажмите левую кнопку и перетащите линию к другому состоянию. Это создаст односторонний переход.

Первый переход обычно создаётся от Entry к базовому состоянию (например, Idle), что означает автоматический переход в это состояние при запуске машины.

Создание переходов (Transitions) от Entry к базовому состоянию Idle и от него к состоянию Walk
Создание переходов (Transitions) от Entry к базовому состоянию Idle и от него к состоянию Walk

Для настройки условий перехода дважды кликните по стрелке перехода, откроется граф Transition Rule. Его ключевая нода — Result, принимающая логическое значение: True разрешает переход, False запрещает. Логика может, например, проверять скорость персонажа и разрешать переход при скорости больше 5.

Логика управления переходом от состояния Idle к состоянию Walk (при скорости движения больше 5, возвратить True, то есть организовать переход)
Логика управления переходом от состояния Idle к состоянию Walk (при скорости движения больше 5, возвратить True, то есть организовать переход)

В панели Details для выбранного перехода также можно использовать дополнительные настройки:

  • Automatic Rule Based on Sequence Player — включает автоматический переход по окончании текущей анимации (подходит для одноразовых типов анимаций, как Jump Start).
  • Blend SettingsBlend Time (время смешивания) и Blend Curve (кривая смешивания). Эти параметры определяют длительность и плавность перехода между состояниями.
Настройки перехода во вкладке Details
Настройки перехода во вкладке Details

Таким образом, State Machine в Animation Blueprint — это основной инструмент для организации логики переключения между различными анимационными состояниями персонажа. Она позволяет структурировать анимации в виде набора State (состояний) и Transition (переходов) между ними, управляемых условиями.

State Machine создаётся в Anim Graph и возвращает итоговую позу, сформированную её внутренней логикой. Внутри машины состояний располагаются State, Conduit и State Alias, которые используются для построения структуры анимационных состояний и управления переходами между ними.

Каждое State содержит собственный Anim Graph, в котором определяется логика проигрывания и смешивания анимаций. Итоговая поза состояния возвращается через узел Output Animation Pose и используется машиной состояний при формировании финальной анимации.

Переходы между состояниями задаются через Transition Rules, которые определяют условия активации перехода. Эти условия обычно основаны на переменных Animation Blueprint (например, скорость персонажа, состояние прыжка, направление движения), которые обновляются каждый кадр в Event Graph.

Saved / Use Cache Pose

При построении логики анимаций часто возникает ситуация, когда одну и ту же позу необходимо использовать в нескольких местах Anim Graph. Например, поза может быть получена в результате работы Blend-нод или целой State Machine, после чего её нужно подать сразу в несколько других узлов.

Однако у Anim Graph есть ограничение: выходной пин позы можно напрямую подключить только к одной ноде. То есть одну и ту же позу нельзя просто разветвить и использовать одновременно в нескольких местах графа.

Для решения этой задачи в Animation Blueprint существует механизм кэширования поз — Saved Pose / Use Cached Pose. Он позволяет один раз вычислить позу, сохранить её в кэш и затем использовать эту сохранённую позу многократно в разных частях Anim Graph.

По сути, Cached Pose можно представить как своеобразную переменную, в которую сохраняется уже рассчитанная поза. После этого эта «переменная» может использоваться как входная поза для любых других нод графа.

Чтобы создать кэш позы, необходимо вытянуть линию из выходного пина той ноды, которая формирует нужную позу, и в контекстном меню выбрать команду New Save Cached Pose.

New Save Cached Pose - создание кэшированной позы
New Save Cached Pose — создание кэшированной позы

В результате на графе появится нода Save Cached Pose, которая будет сохранять рассчитанную позу. Для удобства и читаемости графа рекомендуется давать кэшу понятное имя, например LocomotionCache или BaseMovementPose.

Сохраненный кеш позы LocomotionCache
Сохраненный кеш позы LocomotionCache

После того как поза сохранена, её можно использовать в других частях графа. Для этого в контекстном меню необходимо найти Use Cached Pose ‘указать имя ранее созданного кэша’. На графе появится нода, например Use Cached Pose ‘LocomotionCache’, которая возвращает сохранённую позу.

Такую ноду можно использовать неограниченное количество раз и подключать её как входящую позу для различных узлов, например для Blend-нод, Layered Blend per Bone, других State Machine, аддитивных анимаций или непосредственно для Output Pose.

Использование кэша позы UseCachedPose'LocomotionCache' в нескольких местах графа
Использование кэша позы UseCachedPose’LocomotionCache’ в нескольких местах графа

Использование Cached Pose позволяет повторно использовать уже вычисленную позу, избегать дублирования сложных цепочек анимационных нод и делает структуру Anim Graph более удобной и читаемой. Кроме того, это может положительно влиять на производительность, поскольку сложные вычисления позы выполняются один раз, а затем результат используется из кэша в разных частях графа.

Пример логики Anim Graph / State Machine

Рассмотрим пример организации вычисления поз в Anim Graph и работы State Machine на основе стандартного шаблона проекта от третьего лица в Unreal Engine (версия 5.7). В данном проекте анимация персонажа реализована через Animation Blueprint, расположенный по пути: /Game/Characters/Mannequins/Anims/Unarmed. Сам ассет называется ABP_Unarmed.

Логика Anim Graph

Открыв данный Animation Blueprint и перейдя на вкладку Anim Graph, можно увидеть, что логика формирования итоговой позы построена на основе двух State Machine:

  1. Locomotion
  2. Main States
Логика Anim Graph
Логика Anim Graph

Сначала вычисляется поза в машине состояний Locomotion. Результат её работы сохраняется в кэш с помощью узла Save Cached Pose. Как мы увидим чуть позже, этот кэш далее используется как базовая поза в другой машине состояний — Main States.

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

Поза, полученная из Main States, далее проходит через несколько дополнительных узлов обработки. В поток анимации добавляется Slot, который позволяет накладывать Animation Montage (например атаки, перезарядку или другие действия) поверх основной анимации. После этого поза дополнительно обрабатывается узлом Control Rig, который используется для процедурной корректировки положения ступней персонажа при ходьбе по наклонным поверхностям, ступеням или неровному ландшафту.

В результате вся эта цепочка вычислений в конце подключается к узлу Output Pose, который возвращает итоговую позу персонажа для текущего кадра.

Логика State Machine: Locomotion

Перейдя внутрь State Machine: Locomotion, можно увидеть, что она реализует базовую систему передвижения персонажа. В данной машине состояний используются два основных состояния:

  1. Idle
  2. Walk / Run
Логика State Machine: Locomotion
Логика State Machine: Locomotion

Между этими состояниями настроены переходы, зависящие от того, движется персонаж или нет.

Внутри состояния Idle используется узел Sequence Player, который проигрывает анимацию покоя персонажа.

Логика состояния Idle
Логика состояния Idle

В состоянии Walk / Run используется Blend Space Player, который воспроизводит Blend Space BS_Idle_Walk_Run, отвечающий за движение персонажа. Этот Blend Space зависит от двух параметров:

  1. Ground Speed — скорость движения персонажа по поверхности.
  2. Direction — направление движения относительно направления взгляда персонажа.
Логика состояния Walk / Run
Логика состояния Walk / Run

Благодаря Blend Space персонаж может плавно переходить между анимациями движения вперёд, назад и в стороны.

Переход из состояния Idle в Walk / Run происходит тогда, когда персонаж начинает двигаться. Это определяется переменной Should Move, которая возвращает значение True, если скорость персонажа превышает заданный порог.

Правило перехода из состояния Idle в состояние Walk / Run
Правило перехода из состояния Idle в состояние Walk / Run

Обратный переход из Walk / Run в Idle происходит тогда, когда персонаж прекращает движение и переменная Should Move принимает значение False.

Правило перехода из состояния Walk / Run в состояние Idle
Правило перехода из состояния Walk / Run в состояние Idle

Логика State Machine: Main States

Машина состояний Main States имеет более сложную структуру и отвечает за обработку прыжков, падения и приземления персонажа.

Логика State Machine: Main States
Логика State Machine: Main States

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

Далее в этой машине состояний реализована логика переходов между следующими состояниями:

  • Jump
  • Fall Loop
  • Land

Для упрощения структуры переходов используются State Alias.

Первый Alias называется To Falling. Он используется как общий переходный узел для состояний Locomotion и Land, когда персонаж начинает падать. Из этого Alias настроены переходы в состояния Jump и Fall Loop.

Alias "To Falling"
Alias «To Falling»

Состояние Jump проигрывает анимацию старта прыжка. Состояние Fall Loop проигрывает циклическую анимацию свободного падения.

Если персонаж начинает падать (переменная IsFalling = True), но его вертикальная скорость не превышает определённый порог, машина состояний сразу переходит в состояние Fall Loop.

Правило перехода в состояние Fall Loop
Правило перехода в состояние Fall Loop

Если же персонаж начинает падение и его вертикальная скорость по оси Z больше 100, то считается, что персонаж совершил активный прыжок.

Правило перехода в состояние Jump
Правило перехода в состояние Jump

В этом случае происходит переход в состояние Jump, в котором проигрывается анимация начала прыжка. После завершения этой анимации происходит автоматический переход в состояние Fall Loop. Этот переход реализован через опцию Automatic Rule Based on Sequence Player, которая автоматически активирует переход после окончания анимации.

Автоматическое правило перехода Automatic Rule Based on Sequence Player от состояния Jump к состоянию Fall Loop
Автоматическое правило перехода Automatic Rule Based on Sequence Player от состояния Jump к состоянию Fall Loop

После состояния падения необходимо обработать приземление персонажа. Однако приземление может происходить из двух разных состояний:

  • из Fall Loop (обычное падение),
  • из Jump (если персонаж только начал прыжок, но сразу приземлился).

Чтобы упростить структуру переходов, используется второй State Alias, называемый To Land. К нему подключены состояния Jump и Fall Loop.

Alias "To Land"
Alias «To Land»

Из этого Alias выполняется переход в состояние Land, когда персонаж перестает находиться в воздухе, то есть когда переменная IsFalling становится равной False.

Правило перехода к состоянию land
Правило перехода к состоянию land

Само состояние Land проигрывает анимацию приземления персонажа.

После завершения анимации приземления происходит автоматический переход обратно в базовое состояние Locomotion через опцию Automatic Rule Based on Sequence Player, либо же, если переменная ShouldMove = True, то есть персонаж начал движение. В этом случае система анимации снова возвращается к стандартной логике движения персонажа.

Animation Blueprint: краткий итог

Animation Blueprint в Unreal Engine — это система управления анимацией Skeletal Mesh, которая определяет, какая анимация должна воспроизводиться в текущий момент и как она должна смешиваться с другими. Он разделён на Event Graph (вычисляет состояние персонажа: скорость, падение, направление и т.д.) и Anim Graph (формирует итоговую позу через проигрывание, смешивание и модификацию анимаций). Таким образом, логика состояния и визуальное представление анимации чётко разделены.

Для структурирования сложного поведения используется State Machine — система состояний (Idle, Walk, Jump, Fall и др.) с управляемыми переходами по заданным условиям. Дополнительно применяются Blend Space, аддитивные анимации, IK, Control Rig и Cached Pose (кэширование поз), что позволяет создавать гибкие, масштабируемые и производительные анимационные системы, динамически реагирующие на действия персонажа.

Напоминаю про мою бесплатную книгу по Blueprint для Unreal Engine.

Основная цель книги — дать общий, целостный и понятный обзор системы Blueprint. Книга предлагает взгляд с высоты «птичьего полёта» — ясную и чёткую карту игрового мира Unreal Engine, которая поможет увидеть ключевые взаимосвязи и понять, как устроена система визуального скриптинга.

Зарегистрироваться в ЛК и скачать книгу [Blueprints. Взгляд с высоты «птичьего полёта»]

Оцените статью
( 1 оценка, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

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