Мастерство Animation Blueprint в Unreal Engine 5.6

Этот курс предназначен для глубокого изучения системы анимации в Unreal Engine 5. Вы пройдете путь от создания базовой локомоции до внедрения процедурной анимации и использования Control Rig.

1. Основы Animation Blueprint: интерфейс, Event Graph и связь с персонажем

Основы Animation Blueprint: интерфейс, Event Graph и связь с персонажем

Добро пожаловать на курс «Мастерство Animation Blueprint в Unreal Engine 5.6». Если вы когда-либо задавались вопросом, как заставить вашего персонажа не просто скользить по земле в Т-позе, а реалистично бегать, прыгать и реагировать на окружение, то вы попали по адресу.

В этой первой статье мы заложим фундамент. Мы не будем сразу бросаться в сложные системы смешивания (blending), а сначала разберемся, как устроен этот инструмент изнутри, как он «думает» и как подключается к вашему игровому персонажу.

Что такое Animation Blueprint?

Animation Blueprint (сокращенно AnimBP) — это специализированный вид Blueprint в Unreal Engine, предназначенный для управления анимациями Skeletal Mesh (скелетной сетки).

Представьте, что ваш персонаж — это марионетка. * Skeletal Mesh — это сама кукла (дерево, ткань, нити). * Skeleton — это крестовина управления и шарниры. * Animation Blueprint — это кукловод.

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

Создание Animation Blueprint

Чтобы создать AnimBP, выполните следующие действия в Content Browser:

  • Нажмите правую кнопку мыши.
  • Перейдите в раздел Animation.
  • Выберите Animation Blueprint.
  • В этот момент Unreal Engine 5.6 задаст вам критически важный вопрос: «Для какого скелета мы создаем этот ассет?».

    > Анимация жестко привязана к иерархии костей. Вы не можете использовать AnimBP, созданный для скелета человека, на скелете дракона без предварительной перенастройки (Retargeting).

    Выберите целевой скелет (например, SK_Mannequin_Skeleton) и нажмите Create.

    Обзор интерфейса

    Когда вы откроете созданный файл, вы увидите редактор, похожий на обычный Blueprint Editor, но с важными отличиями.

    !Интерфейс редактора Animation Blueprint: основные рабочие зоны.

    Основные элементы интерфейса:

  • Viewport (Окно просмотра): Здесь вы видите предварительный просмотр вашего персонажа. Вы можете менять параметры в реальном времени и видеть, как меняется анимация.
  • Event Graph: «Мозг» вашего AnimBP. Здесь происходит вычисление логики (об этом ниже).
  • Anim Graph: «Сердце» вашего AnimBP. Здесь выстраивается дерево анимаций (State Machines, Blend Spaces), которое формирует итоговую позу.
  • Asset Browser: Список всех доступных анимационных последовательностей (Animation Sequences), совместимых с выбранным скелетом.
  • My Blueprint: Панель, где хранятся ваши переменные и функции.
  • Event Graph: Логический центр

    Многие новички сразу бегут в Anim Graph, чтобы соединять анимации. Это ошибка. Прежде чем проигрывать анимацию, нужно знать, какую именно проигрывать. Этим занимается Event Graph.

    Задача Event Graph — каждый кадр опрашивать персонажа (Pawn) и обновлять переменные внутри AnimBP.

    Ключевые узлы Event Graph

    В стандартном шаблоне вы увидите два красных события:

  • Event Blueprint Initialize Animation: Срабатывает один раз при старте (как BeginPlay). Идеально подходит для сохранения ссылок на персонажа.
  • Event Blueprint Update Animation: Срабатывает каждый кадр (как Tick). Здесь происходят основные вычисления.
  • Алгоритм работы Event Graph

    Типичный цикл работы выглядит так:

  • Получение владельца: Мы должны узнать, кто именно использует этот AnimBP. Для этого используется узел Try Get Pawn Owner.
  • Проверка валидности: Всегда проверяйте, что владелец существует (узел Is Valid), иначе вы получите поток ошибок, если AnimBP запущен без персонажа (например, в превью).
  • Получение данных: Мы «вытягиваем» из владельца нужные параметры: скорость, направление, находится ли он в воздухе.
  • Запись в переменные: Сохраняем эти данные в переменные внутри AnimBP (например, Speed, IsInAir).
  • !Логическая цепочка обновления переменной скорости в Event Graph.

    Пример: Вычисление скорости

    Чтобы персонаж знал, когда переключаться с ходьбы на бег, нам нужно знать его скорость. Персонаж (Pawn) обычно имеет вектор скорости (Velocity).

    Вектор скорости имеет три компоненты: . Нам же нужна скалярная величина (число) — длина этого вектора, но часто нам важна только горизонтальная скорость (без учета прыжков вверх-вниз).

    Формула длины вектора на плоскости:

    где: * — итоговая скорость движения по земле. * — компонент скорости по оси X. * — компонент скорости по оси Y. * — операция извлечения квадратного корня.

    В Unreal Engine нам не нужно писать формулу вручную. Мы делаем следующее:

  • Из узла владельца вызываем Get Velocity.
  • Из вектора скорости вызываем Vector Length (или Vector Length XY, если хотим игнорировать вертикальное движение).
  • Результат записываем в переменную Speed (тип Float).
  • Теперь переменная Speed обновляется каждый кадр и готова к использованию в Anim Graph.

    Связь с персонажем (Character Blueprint)

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

    Настройка Skeletal Mesh Component

  • Откройте Блупринт вашего персонажа (например, BP_MyCharacter).
  • Выберите компонент Mesh (Skeletal Mesh) на панели Components.
  • В панели Details найдите раздел Animation.
  • Здесь есть два ключевых параметра:

    * Animation Mode: Должен быть установлен в Use Animation Blueprint. * Anim Class: Здесь вы должны выбрать из выпадающего списка тот AnimBP, который вы только что создали.

    Как только вы выберете класс и скомпилируете (Compile), персонаж в окне просмотра должен принять позу, заданную в вашем AnimBP (обычно это Idle, если вы уже настроили Anim Graph, или Т-поза, если граф пуст).

    Casting (Приведение типов)

    Узел Try Get Pawn Owner возвращает ссылку на базовый класс Pawn. Однако, часто нам нужны переменные, специфичные для вашего конкретного персонажа (например, переменная IsAiming, которая есть только в BP_Soldier, но нет в обычном Pawn).

    Для доступа к этим данным используется Cast (Каст).

    * Если каст успешен (персонаж действительно является солдатом), вы получаете доступ ко всем его внутренним переменным. * Если каст неудачен (AnimBP надет на гражданского), сработает выход Cast Failed.

    > Совет: Cast — относительно «тяжелая» операция. Не стоит делать её каждый кадр в Update Animation, если это возможно. Лучшей практикой считается сделать Cast один раз в Initialize Animation, сохранить результат в переменную, и в Update Animation использовать уже сохраненную ссылку.

    Итоги

    Мы разобрали фундамент работы с анимациями в Unreal Engine 5.6:

  • AnimBP — это контроллер, управляющий скелетом.
  • Event Graph отвечает за логику и сбор данных (переменных).
  • Данные берутся из Pawn Owner (владельца).
  • Связь устанавливается через компонент Mesh в блупринте персонажа.
  • В следующей статье мы перейдем от сухой логики к визуальной магии: разберем Anim Graph, работу со State Machines и заставим нашего персонажа полноценно двигаться.

    2. Создание локомоции: работа с Blend Spaces и настройка State Machine

    Создание локомоции: работа с Blend Spaces и настройка State Machine

    В предыдущей статье мы настроили «мозг» нашего Animation Blueprint — Event Graph. Мы научили его вычислять скорость персонажа и определять, находится ли он в воздухе. Но если вы запустите игру сейчас, ваш персонаж, скорее всего, всё ещё скользит в Т-позе или застыл в одной анимации. Данные есть, но они не визуализированы.

    Сегодня мы займемся «сердцем» анимации — Anim Graph. Мы создадим систему локомоции (передвижения), которая будет плавно смешивать ходьбу и бег, а также настроим логику переходов между состояниями (например, от бега к прыжку).

    Магия смешивания: Blend Spaces

    Представьте, что у вас есть три анимации: Idle (Стоит), Walk (Идет) и Run (Бежит). В игре персонаж может двигаться с любой скоростью от 0 до 600 единиц. Как сделать так, чтобы при скорости 150 он не просто «шел», а «немного шел», а при 450 — «почти бежал»?

    Здесь на сцену выходят Blend Spaces (Пространства смешивания).

    Что такое Blend Space?

    Blend Space — это ассет, который позволяет смешивать несколько анимаций на основе одной или двух переменных (осей).

    С математической точки зрения, Blend Space выполняет линейную интерполяцию между позами. Если мы смешиваем две анимации (А и Б), итоговая поза рассчитывается так:

    Где: * — итоговая поза (положение костей). * — поза первой анимации (например, ходьба). * — поза второй анимации (например, бег). * — вес смешивания (число от 0 до 1), зависящий от входного параметра (скорости).

    Если , мы получаем идеальную середину между ходьбой и бегом.

    Типы Blend Spaces

    В Unreal Engine 5.6 существует два основных типа:

  • Blend Space 1D: Использует только одну ось (например, Скорость). Идеально подходит для простой локомоции: Стоит -> Идет -> Бежит.
  • Blend Space (обычный): Использует две оси (например, Скорость и Направление). Позволяет создавать сложные системы, где персонаж может бежать боком (strafing) или назад.
  • Для начала мы создадим Blend Space 1D.

    !Схема работы Blend Space 1D: плавный переход между анимациями в зависимости от значения на оси.

    Практика: Создание BS_IdleRun

  • В Content Browser нажмите ПКМ -> Animation -> Legacy -> Blend Space 1D (в UE5.6 простые BS могут находиться в подменю Legacy или сразу в Animation, в зависимости от настроек плагинов, но суть одна).
  • Выберите скелет вашего персонажа.
  • Назовите ассет BS_IdleRun.
  • Откройте его. Слева вы увидите панель Asset Details. Найдите раздел Axis Settings -> Horizontal Axis.

    Настройте ось так: * Name: Speed (Скорость). * Minimum Axis Value: 0.0. * Maximum Axis Value: 600.0 (или максимальная скорость вашего персонажа).

    Теперь перетащите анимации из Asset Browser (справа или снизу) на сетку графика: * Перетащите анимацию Idle на точку 0. * Перетащите анимацию Walk примерно на точку 200-300. * Перетащите анимацию Run на точку 600.

    Зажмите клавишу Shift и поводите курсором по графику. Вы увидите, как персонаж плавно ускоряется. Сохраните ассет.

    Организация логики: State Machines

    Теперь у нас есть инструмент для смешивания бега. Но персонаж умеет не только бегать. Он может прыгать, плавать, сидеть в машине или умирать. Смешивать всё в одном Blend Space невозможно и неправильно.

    Для управления глобальными состояниями используются State Machines (Машины состояний).

    Что такое State Machine?

    State Machine — это граф, состоящий из:

  • States (Состояния): Узлы, внутри которых проигрывается анимация (или Blend Space).
  • Transitions (Переходы): Стрелки, соединяющие состояния. Они содержат правила: «При каком условии можно перейти из состояния А в состояние Б?».
  • !Структура машины состояний: узлы отвечают за анимацию, стрелки — за логику переключения.

    Создание State Machine в Anim Graph

  • Вернитесь в ваш Animation Blueprint.
  • Перейдите во вкладку AnimGraph.
  • Нажмите ПКМ в пустом месте и выберите Add New State Machine.
  • Назовите её Locomotion.
  • Подключите выход State Machine к входу Output Pose.
  • Теперь дважды кликните по узлу Locomotion, чтобы зайти внутрь.

    Настройка состояний

    Вы увидите узел Entry. Это точка входа. Отсюда начинается выполнение логики.

    Шаг 1: Базовое движение

  • Потяните связь от Entry и отпустите. Выберите Add State. Назовите его Idle_Run.
  • Дважды кликните по Idle_Run.
  • Внутри вы увидите Output Animation Pose. Сюда нужно подать анимацию.
  • Найдите в Asset Browser ваш созданный BS_IdleRun и перетащите его в граф.
  • Подключите человечка к Output Animation Pose.
  • Теперь самое важное: Blend Space требует переменную Speed. В прошлой статье мы создали переменную Speed в Event Graph. Перетащите её из панели My Blueprint (слева) на вход Speed узла Blend Space.

    > Теперь, когда Event Graph обновит переменную Speed, она передастся в Blend Space, и анимация изменится.

    Шаг 2: Прыжок (Jump) Давайте добавим прыжок. Обычно прыжок состоит из трех фаз:

  • Jump Start: Отталкивание от земли.
  • Jump Loop: Полет (зацикленная анимация).
  • Jump End: Приземление.
  • Для простоты реализуем переход в состояние полета.

  • Вернитесь на уровень выше (в граф Locomotion).
  • Создайте новое состояние рядом с Idle_Run и назовите его Jump_Loop.
  • Соедините Idle_Run с Jump_Loop (потяните стрелку от края первого ко второму).
  • Соедините Jump_Loop обратно с Idle_Run.
  • Теперь у вас есть цикл: можно прыгнуть и можно приземлиться.

    Правила переходов (Transition Rules)

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

    Переход: Земля -> Воздух

  • Дважды кликните по значку перехода (кружок со стрелками) на линии от Idle_Run к Jump_Loop.
  • Откроется граф логики перехода. Результатом должен быть Boolean (Да/Нет).
  • Вспомните переменную IsInAir, которую мы создали в прошлой статье. Перетащите её и подключите к узлу Result.
  • Логика проста: «Если персонаж в воздухе (IsInAir == True), переходи в состояние прыжка».

    Переход: Воздух -> Земля

  • Откройте обратный переход (от Jump_Loop к Idle_Run).
  • Здесь нам нужно обратное условие. Перетащите IsInAir.
  • Вызовите узел NOT Boolean (восклицательный знак).
  • Подключите результат к Result.
  • Логика: «Если персонаж НЕ в воздухе, возвращайся к бегу».

    Тонкая настройка переходов

    Когда вы кликаете на переход (стрелку) в графе State Machine, в панели Details есть важные настройки:

    * Duration (Duration): Время смешивания между состояниями (в секундах). Для прыжка лучше ставить маленькое значение (0.1 или 0.0), чтобы отклик был мгновенным. Для перехода из бега в ходьбу можно поставить 0.3 для плавности. * Mode: Тип интерполяции (Linear, Cubic и т.д.). Обычно Linear достаточно.

    Automatic Rule Based on Sequence Player

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

    Для этого в правиле перехода используется узел: Time Remaining (ratio) < 0.1

    Это означает: «Переходи, когда от текущей анимации осталось меньше 10% времени».

    Итоговая структура

    Давайте проверим, что у нас получилось:

  • Event Graph: Считает Speed и IsInAir.
  • Anim Graph: Содержит State Machine Locomotion.
  • State Machine:
  • * Состояние Idle_Run: Внутри него BS_IdleRun, управляемый переменной Speed. * Состояние Jump_Loop: Внутри анимация падения/полета. * Переходы: Управляются переменной IsInAir.

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

    Заключение

    Мы оживили персонажа! Теперь он реагирует на физику и ввод игрока. Blend Spaces позволяют нам не плодить тысячи анимаций для каждой скорости, а State Machines организуют поведение в понятную структуру.

    В следующей статье мы разберем тему Animation Montages и Slots. Это позволит нам проигрывать разовые действия (удары, перезарядку, использование предметов) поверх нашей системы локомоции, не ломая её.

    3. Продвинутые переходы и смешивание: Transition Rules и Layered Blend per Bone

    Продвинутые переходы и смешивание: Transition Rules и Layered Blend per Bone

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

    Кроме того, стандартные переходы между состояниями могут выглядеть «роботизированными». В этой статье мы поднимем качество анимации на новый уровень, разобрав продвинутые правила переходов и технику раздельного смешивания костей (Layered Blend per Bone).

    Тонкая настройка переходов (Transition Rules)

    В State Machine стрелки (Transitions) определяют логику смены состояний. Ранее мы использовали простые булевы переменные (например, IsInAir). Но для профессиональной анимации этого недостаточно.

    Time Remaining (Оставшееся время)

    Представьте, что персонаж выполняет анимацию прыжка (Jump_Start). Если мы переключимся в состояние полета (Jump_Loop) мгновенно по условию IsInAir, мы можем прервать анимацию толчка на середине. Это выглядит дергано.

    Чтобы переход произошел ровно в момент завершения анимации, используется узел Time Remaining (Ratio).

    Почему Ratio (соотношение)? * Time Remaining: Возвращает время в секундах. Если вы ускорите анимацию, секунды изменятся, и логика может сломаться. * Time Remaining (Ratio): Возвращает долю от 0.0 до 1.0 (где 1.0 — начало, 0.0 — конец). Это значение не зависит от длительности или скорости воспроизведения.

    Типичное правило для перехода после завершения анимации:

    Это означает: «Начинай переход, когда от текущей анимации осталось менее 10%».

    Inertialization (Инерциализация)

    Традиционное смешивание (Standard Blend) вычисляет обе анимации (источник и цель) одновременно в течение времени перехода. Это может быть дорого для производительности и иногда дает эффект «скольжения» ног.

    Inertialization — это современный метод смешивания в Unreal Engine 5. Он не смешивает две позы. Вместо этого он мгновенно переключается на новую анимацию, но «по инерции» продолжает движение костей от старой, постепенно затухая его.

    Преимущества:

  • Производительность: Не нужно вычислять старый граф анимации во время перехода.
  • Качество: Переходы выглядят более физически корректными и «тяжелыми».
  • Чтобы использовать его:

  • В правиле перехода (Transition Rule) установите Blend Logic в Inertialization.
  • В Anim Graph, после вашей State Machine, добавьте узел Inertialization.
  • !Структура подключения узла Inertialization в Anim Graph.

    Layered Blend per Bone: Разделение тела

    Теперь перейдем к главной теме: как заставить персонажа бежать ногами, но махать мечом или целиться руками? Для этого мы используем узел Layered Blend per Bone (Послойное смешивание по костям).

    Этот узел берет две позы:

  • Base Pose (Базовая поза): Обычно это локомоция (ноги, таз).
  • Blend Pose (Поза смешивания): Анимация действия (руки, торс, голова).
  • И «накладывает» вторую позу на первую, начиная с определенной кости.

    Математика смешивания

    Процесс смешивания для каждой кости можно описать формулой линейной интерполяции:

    Где: * — итоговая трансформация кости (поворот, позиция, масштаб). * — трансформация кости из базовой анимации (бег). * — трансформация кости из накладываемой анимации (стрельба). * (альфа) — вес смешивания для данной кости (от 0 до 1).

    Ключевая особенность Layered Blend per Bone в том, что рассчитывается автоматически в зависимости от иерархии скелета.

    Настройка узла

  • Добавьте узел Layered Blend per Bone в Anim Graph.
  • В панели Details найдите массив Layer Setup и добавьте элемент.
  • Bone Name: Укажите кость, с которой начнется разделение. Обычно это spine_01 (первый позвонок) или pelvis.
  • Blend Depth: Определяет плавность перехода веса на дочерние кости.
  • * 0: Кость и все её дети получают вес 100% мгновенно. * 1 и более: Вес плавно нарастает по цепочке иерархии.

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

    !Визуализация разделения скелета на зоны влияния при использовании Layered Blend per Bone.

    Cached Poses: Оптимизация графа

    При использовании Layered Blend per Bone возникает проблема структуры графа. Нам нужно подать результат State Machine (бег) в Base Pose, но также мы можем захотеть использовать данные о движении для верхней части тела (например, легкое покачивание при прицеливании).

    Если вы протянете провода от одной State Machine в два разных места, Unreal Engine будет вычислять эту машину дважды каждый кадр. Это двойная нагрузка на процессор.

    Решение — Cached Poses (Кэшированные позы).

    Как использовать кэш

  • Сохранение: После вашей State Machine (Locomotion) добавьте узел New Save Cached Pose. Назовите его, например, LocoCache.
  • Использование: В любом месте графа нажмите ПКМ и найдите Use Cached Pose 'LocoCache'.
  • Теперь вы можете использовать результат вычислений локомоции сколько угодно раз без потери производительности.

    Итоговая структура Anim Graph

    Вот как выглядит профессиональная структура для шутера:

  • State Machine (Locomotion) Save Cached Pose 'LocoCache'.
  • Use Cached Pose 'LocoCache' вход Base Pose узла Layered Blend per Bone.
  • State Machine (UpperBody/Aiming) вход Blend Pose 0 узла Layered Blend per Bone.
  • Layered Blend per Bone Output Pose.
  • В этой схеме ноги всегда бегут, а верхняя часть тела переключается между «просто бегом» (если Blend Pose пуст или вес 0) и «прицеливанием».

    Mesh Space Rotation Blend

    В настройках Layered Blend per Bone есть галочка Mesh Space Rotation Blend.

    * Если она выключена (по умолчанию): Смешивание происходит в локальном пространстве костей. Если персонаж бежит и поворачивает таз, а анимация стрельбы держит позвоночник прямо, то верхняя часть тела будет поворачиваться вместе с тазом. Это хорошо для реалистичности. * Если она включена: Повороты смешиваются относительно мировых координат (или координат Меша). Это полезно, если вы хотите, чтобы рука всегда смотрела в одну точку, независимо от того, как крутится тело при беге.

    Заключение

    Сегодня мы разобрали инструменты, которые превращают набор анимаций в целостную систему:

  • Transition Rules с использованием Time Remaining позволяют делать переходы бесшовными.
  • Inertialization обеспечивает высокую производительность и физичность смены поз.
  • Layered Blend per Bone позволяет комбинировать разные действия (бег + стрельба), разделяя скелет на части.
  • Cached Poses спасают производительность при сложных графах.
  • В следующей статье мы изучим Animation Montages и Slots — механизм, который позволит нам проигрывать уникальные анимации (перезарядка, удар, получение урона) поверх всей нашей сложной системы смешивания.

    4. Интерактивность: Анимационные монтажи, слоты и Anim Notifies

    Интерактивность: Анимационные монтажи, слоты и Anim Notifies

    Добро пожаловать обратно на курс «Мастерство Animation Blueprint в Unreal Engine 5.6». В предыдущих статьях мы создали надежную систему передвижения. Наш персонаж умеет ходить, бегать, прыгать и даже смешивать анимации для прицеливания. Но чего-то не хватает.

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

    Для реализации таких действий State Machine подходит плохо (представьте паутину переходов для каждого удара!). Вместо этого Unreal Engine предлагает мощную тройку инструментов: Animation Montages, Slots и Anim Notifies. Сегодня мы научимся ими управлять.

    Animation Montage: Контейнер действий

    Animation Montage (Анимационный монтаж) — это специальный ассет, который позволяет объединять несколько анимационных последовательностей (Sequences) в одну структуру, управлять порядком их воспроизведения и разбивать их на секции.

    Зачем нужен монтаж?

    Обычную анимацию (Anim Sequence) трудно контролировать из кода. Вы не можете просто сказать: «Проиграй эту анимацию с 3-й секунды, а потом перепрыгни на начало». Монтаж решает эти проблемы:

  • Секции (Sections): Вы можете разбить анимацию на части (например, Start, Loop, End). Это идеально для перезарядки: начало (вынул магазин), цикл (вставляет патроны по одному), конец (затвор).
  • Динамическое управление: Вы можете переключаться между секциями прямо во время игры.
  • Слоты: Монтажи проигрываются поверх основной State Machine.
  • Создание монтажа

    Чтобы создать монтаж:

  • Найдите нужную анимацию (например, Attack_Swing) в Content Browser.
  • Нажмите ПКМ Create Create AnimMontage.
  • Откройте созданный ассет.
  • !Интерфейс редактора монтажей: управление секциями и уведомлениями.

    В редакторе вы увидите Montage Sections. Вы можете добавить новые секции, кликнув ПКМ на полосе секций. Например, для комбо-удара можно создать секции Attack1, Attack2, Attack3. В панели Montage Sections (обычно справа снизу) можно настроить порядок: после Attack1 переходить к Attack2 или сразу заканчивать.

    Slots: Мост в Anim Graph

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

    Причина проста: Animation Blueprint не знает, где проигрывать этот монтаж.

    Для этого существуют Slots (Слоты). Слот — это «врезка» в ваш граф анимации, куда движок может вставить данные из монтажа, перекрывая то, что было до этого.

    Настройка слота в Anim Graph

  • Откройте ваш Animation Blueprint.
  • Перейдите в AnimGraph.
  • Найдите место, где вы хотите подмешать монтаж. Обычно это делается в самом конце, перед Output Pose.
  • Нажмите ПКМ и найдите узел Slot 'DefaultSlot'.
  • Подключите вашу основную логику (например, Layered Blend per Bone или State Machine) во вход Source, а выход слота — в Output Pose.
  • Теперь логика такова: движок берет позу из State Machine, смешивает её (если нужно), а затем проверяет: «Есть ли активный монтаж в слоте DefaultSlot?». * Если нет — пропускает позу дальше без изменений. * Если да — заменяет позу на анимацию из монтажа.

    > Важно: В самом ассете Animation Montage (в редакторе монтажа) убедитесь, что в настройках Slot Manager выбран тот же слот (обычно DefaultSlot), который вы добавили в граф.

    Разделение тела с помощью слотов

    Помните Layered Blend per Bone из прошлой статьи? Слоты отлично с ним сочетаются.

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

    Теперь, если вы назначите монтажу перезарядки слот UpperBody, персонаж сможет перезаряжаться на бегу: ноги будут управляться State Machine, а руки — монтажом.

    Запуск монтажа из Character Blueprint

    Монтажи — это императивная анимация. Мы приказываем им играть по событию (нажатие кнопки).

  • Откройте Character Blueprint (не AnimBP!).
  • Найдите событие ввода, например, Input Action Attack.
  • Вызовите узел Play Anim Montage.
  • В поле Anim Montage выберите ваш ассет.
  • В поле In Skeletal Mesh Component подайте ссылку на ваш Mesh.
  • Узел Play Anim Montage возвращает длительность анимации, что полезно для таймеров.

    Anim Notifies: События внутри анимации

    Анимация — это не только визуальная часть. Когда нога касается земли, должен быть звук шага и облачко пыли. Когда меч попадает в цель, должен наноситься урон. Когда рука тянется к карману, патроны должны появиться в инвентаре.

    Синхронизировать это таймерами (Delay) — плохая практика, так как частота кадров может меняться. Лучший способ — Anim Notifies (Уведомления).

    Типы уведомлений

    В Unreal Engine есть два основных типа уведомлений:

  • Anim Notify (обычный): Срабатывает в конкретном кадре. Это мгновенное событие. (Пример: звук шага, выстрел).
  • Anim Notify State (состояние): Имеет длительность (начало и конец). (Пример: включение коллизии меча во время замаха, создание шлейфа от оружия).
  • Добавление уведомлений

  • Откройте Animation Sequence или Montage.
  • Найдите панель Notifies (горизонтальные полосы под таймлайном).
  • Нажмите ПКМ на полосе в нужном кадре Add Notify.
  • Вы можете выбрать стандартные (Play Sound, Play Particle Effect) или создать свой.
  • !Настройка уведомлений на временной шкале: точечные события и длительные состояния.

    Создание кастомного Notify

    Самая мощная функция — создание собственных классов уведомлений.

  • В Content Browser нажмите ПКМ Blueprint Class.
  • В поиске родительского класса введите AnimNotify (или AnimNotifyState). Назовите его AN_Footstep.
  • Откройте созданный блупринт.
  • Внутри AnimNotify нет Event Graph в привычном понимании. Вам нужно переопределить функцию Received Notify.

    Внутри этой функции вы получаете ссылку на Mesh Component. От него можно получить владельца (Get Owner), привести его к типу вашего персонажа (Cast to BP_Character) и вызвать любую функцию.

    Пример логики для шагов:

  • В AN_Footstep переопределяем Received Notify.
  • Берем MeshComp Get World Location (получаем позицию ноги).
  • Делаем Line Trace вниз, чтобы узнать материал поверхности (трава, камень).
  • В зависимости от физического материала проигрываем разный звук (Play Sound at Location).
  • Теперь достаточно расставить этот AN_Footstep в анимациях бега в те моменты, когда нога касается земли, и система будет работать автоматически для любой скорости воспроизведения.

    Практический пример: Система атаки

    Давайте соберем всё вместе для создания простой атаки.

  • Подготовка: Создаем монтаж AM_Attack из анимации удара. Убеждаемся, что он использует слот DefaultSlot.
  • AnimBP: В AnimGraph добавляем узел Slot 'DefaultSlot' перед финальной позой.
  • Notify: Создаем ANS_WeaponTrail (Notify State). В Received Notify Begin включаем эффект шлейфа, в Received Notify End выключаем его. Добавляем этот State в монтаж на время активной фазы удара.
  • Character BP: На нажатие ЛКМ вызываем Play Anim Montage (AM_Attack).
  • Теперь при клике:

  • Запускается монтаж.
  • AnimBP видит данные в слоте и перекрывает бег анимацией удара.
  • В середине удара срабатывает Notify State, появляется красивый шлейф.
  • Когда монтаж заканчивается, слот пустеет, и персонаж снова плавно переходит в бег.
  • Заключение

    Мы добавили в наш арсенал критически важные инструменты: * Montages позволяют управлять сложными действиями и комбо. * Slots интегрируют эти действия в граф анимации. * Notifies связывают анимацию с игровой логикой и эффектами.

    Теперь ваш персонаж не просто движется, он взаимодействует с миром. В следующей статье мы углубимся в процедурную анимацию и разберем Inverse Kinematics (IK), чтобы ноги нашего героя идеально вставали на наклонные поверхности и ступеньки.

    5. Процедурная анимация: интеграция Control Rig, IK и пост-процессинг

    Процедурная анимация: интеграция Control Rig, IK и пост-процессинг

    Добро пожаловать на очередной этап курса «Мастерство Animation Blueprint в Unreal Engine 5.6». В прошлых статьях мы научили персонажа двигаться, прыгать и атаковать, используя заранее созданные анимации (клипы). Это называется кинематической анимацией.

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

    Решение этой проблемы — процедурная анимация. Это метод, при котором поза персонажа изменяется или создается программно в реальном времени. Сегодня мы разберем три столпа процедурной анимации в Unreal Engine 5: Inverse Kinematics (IK), Control Rig и Post-Process Animation Blueprint.

    Прямая и Обратная кинематика (FK vs IK)

    Прежде чем переходить к инструментам, нужно понять теорию.

    Forward Kinematics (FK)

    Традиционная анимация работает по принципу Forward Kinematics (Прямая кинематика). Движение строится от родителя к потомку.

    * Чтобы подвинуть кисть руки, вы вращаете плечо. * Затем вращаете локоть. * И только потом кисть оказывается в нужной точке.

    Позиция конечной точки (кисти) — это результат суммы вращений всех предыдущих костей.

    Inverse Kinematics (IK)

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

    !Слева — прямая кинематика: вращение суставов определяет позу. Справа — обратная кинематика: цель определяет изгиб суставов.

    Для работы IK критически важно понятие расстояния. Если цель находится дальше, чем длина конечности, IK не сработает (рука полностью выпрямится и не дотянется). Длина вектора от начала конечности до цели рассчитывается по формуле:

    Где: * — расстояние между началом конечности и целью. * — координаты начала конечности (например, плеча). * — координаты цели (например, дверной ручки). * — квадратный корень из суммы квадратов разностей координат.

    В Unreal Engine нам редко приходится считать это вручную, но понимание того, что IK всегда пытается решить геометрическую задачу треугольника, поможет вам при отладке.

    Control Rig: Современный стандарт риггинга

    В старых версиях Unreal Engine (до 4.26) логика IK часто создавалась прямо в Anim Graph с помощью узлов вроде Two Bone IK. В Unreal Engine 5.6 стандартом стал Control Rig.

    Control Rig — это скриптовая среда внутри движка, которая позволяет создавать сложные риги (оснастку) и процедурную логику, работающую быстрее и гибче, чем старые методы.

    Преимущества Control Rig

  • Независимость: Логика IK инкапсулирована в отдельном ассете, а не загромождает Anim Blueprint.
  • Редактирование анимаций: Вы можете использовать тот же Control Rig для создания новых анимаций прямо в редакторе Sequencer.
  • Производительность: Control Rig компилируется в эффективный байт-код.
  • Создание Control Rig для Foot IK

    Давайте разберем классическую задачу: Foot IK (адаптация ног к неровной поверхности).

  • Нажмите ПКМ на ваш Skeletal Mesh Create Control Rig.
  • Откройте созданный ассет. Интерфейс похож на Blueprint, но узлы специфичны для манипуляции костями.
  • Логика Foot IK внутри Control Rig обычно выглядит так:

  • Sphere Trace: Из позиции стопы выпускается луч вниз (в направлении ).
  • Hit Result: Если луч ударяется о землю, мы получаем точку удара (Impact Point) и нормаль поверхности (Impact Normal).
  • Offset Calculation: Мы вычисляем разницу между тем, где нога должна быть по анимации, и тем, где реально находится земля.
  • Modify Transform: Мы смещаем кость стопы на эту разницу и, при необходимости, опускаем таз (Pelvis), чтобы нога могла дотянуться до низины.
  • !Принцип работы адаптации ног: луч определяет высоту препятствия, после чего кости смещаются.

    Интеграция Control Rig в Animation Blueprint

    Создать Control Rig недостаточно. Его нужно подключить к вашему Animation Blueprint.

  • Откройте Anim Graph вашего персонажа.
  • Добавьте узел Control Rig.
  • В деталях узла выберите созданный вами класс Control Rig.
  • Подключите его в поток анимации (обычно после State Machine и Montage Slot, но перед Output Pose).
  • Передача данных

    Часто Control Rig нуждается в данных извне. Например, вы хотите включать IK только когда персонаж не в воздухе.

  • В Control Rig создайте переменную ShouldDoIK (Boolean) и откройте «глаз» (Instance Editable).
  • В Anim Blueprint, в узле Control Rig, появится вход ShouldDoIK.
  • Подключите туда вашу переменную !IsInAir.
  • Теперь, когда персонаж прыгает, ноги не будут пытаться «прилипнуть» к земле.

    Post-Process Animation Blueprint

    Иногда вам нужно добавить процедурную анимацию, которая будет работать всегда, независимо от того, какой основной AnimBP используется. Или у вас есть 50 разных монстров с одним скелетом, и вы не хотите копировать логику IK в каждый из 50 AnimBP.

    Для этого существует Post-Process Animation Blueprint.

    Это специальный AnimBP, который назначается непосредственно на Skeletal Mesh и выполняется после основного Animation Blueprint.

    Сценарии использования

  • Rigid Body Simulation (Kawaii Physics / Anim Dynamics): Анимация волос, сумок, хвостов, висящих элементов одежды. Эти вещи должны двигаться по физике всегда, бежит персонаж или стоит в кат-сцене.
  • Корректирующие IK: Например, чтобы руки всегда правильно держали оружие, даже если основная анимация немного «плавает».
  • Look At: Поворот головы в сторону интереса.
  • Настройка Post-Process AnimBP

  • Создайте обычный Animation Blueprint.
  • Внутри него используйте узел Input Pose (вместо State Machine). Этот узел получает итоговую позу из основного AnimBP.
  • Добавьте вашу логику (например, узел RigidBody для физики хвоста).
  • Подключите к Output Pose.
  • Чтобы назначить его:

  • Откройте Skeletal Mesh персонажа.
  • В панели Details найдите раздел Post Process Anim Blueprint.
  • Выберите ваш созданный класс.
  • Теперь эта логика будет применяться автоматически к любому актеру, использующему этот меш.

    Порядок выполнения (The Evaluation Flow)

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

    Стандартный поток данных в кадре:

  • Event Graph (Main AnimBP): Обновление переменных (Скорость, Направление).
  • Anim Graph (Main AnimBP):
  • * State Machine (выбор клипа). * Blend Spaces (смешивание). * Montages (слоты). * Control Rig (основной IK, например, Foot IK).
  • Post-Process AnimBP:
  • * Физика тканей/волос. * Корректировки.

    Если вы попытаетесь сделать Foot IK в Post-Process AnimBP, это может сработать, но часто лучше держать основную локомоцию в главном графе, а Post-Process оставить для косметических и физических эффектов.

    Заключение

    Процедурная анимация превращает «деревянных» кукол в живых существ, реагирующих на окружение.

    * IK позволяет конечностям достигать точных целей. * Control Rig дает мощный инструмент для создания этой логики без C++. * Post-Process AnimBP позволяет накладывать эффекты поверх любой анимации.

    В следующей, заключительной статье курса, мы займемся оптимизацией и отладкой. Мы узнаем, как заставить всё это работать при 60 FPS, используя LODs, Multi-Threaded Animation и инструменты профилирования.