Разбор EventGraph в ABP на примере персонажа от Epic Games

Разбор EventGraph в ABP на примере персонажа от Epic Games

Всем привет короткая заметка о Event Graph в ABP(Animation Blueprint) на примере от эпиков

Разбор EventGraph в ABP на примере персонажа от Epic Games
Разбор EventGraph в ABP на примере персонажа от Epic Games

Event Blueprint Initialize Animation — событие, которое срабатывает один раз при инициализации ABP - если очень грубо говорить то при запуске игры ( однако это конечно грубое упрощение и на самом деле не так)

Get Owning Actor — возвращает актора-владельца этого ABP

в данном случае это BP Third Person Character

Cast To Character —приводит Owning Actor к типу Character, чтобы получить доступ к его переменным/компонентам. (Если владелец не Character — каст фейлится.)

SET Character — сохраняет ссылку на полученного Character в переменную ABP

Разбор EventGraph в ABP на примере персонажа от Epic Games

Character Movement — берёт из Character ссылку на его Character Movement Component.

Это компонент, который управляет движением персонажа: скорость/ускорение, ходьба/бег, прыжок/падение, гравитация, трение, столкновения, движение по наклонам/ступенькам и Movement Mode (Walking/Falling/Flying и т.д.).

SET Movement Component — сохраняет ссылку на Movement Component в переменную ABP

Разбор EventGraph в ABP на примере персонажа от Epic Games

А вот где Character Movement находится в блюпринте (BP_ThirdPersonCharacter) персонажа

Разбор EventGraph в ABP на примере персонажа от Epic Games

«По сути, мы говорим движку: возьми владельца этого ABP, сохрани ссылку на него в отдельную переменную, чтобы я мог к владельцу обращаться, где мне удобно, и брать переменные и т. д., созданные в самом блюпринте. После этого достань из владельца Character Movement и сохрани в отдельную переменную, чтобы я так же мог спокойно брать всё, что мне нужно из Character Movement (скорость персонажа и т. д.).»

Почему это так сделано ?

Производительность: Если делать Try Get Pawn Owner и Cast To Character каждый кадр в Update Animation, это создаёт лишнюю нагрузку. Намного быстрее один раз при инициализации (Blueprint Initialize Animation) сохранить ссылку и потом просто обращаться к готовой переменной.

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


Event Blueprint Update Animation — вызывается каждый кадр для этого ABP

Разбор EventGraph в ABP на примере персонажа от Epic Games
  • Is Valid (Character) — проверяет, что переменная Character действительно существует (не None) и можно безопасно к ней обращаться.
  • Is Valid → идём дальше, обновляем параметры анимации.Is Not Valid → ничего не делаем.

то как бы система подстраховки : если ABP останется без владельца, у нас могут вылететь ошибки

Разбор EventGraph в ABP на примере персонажа от Epic Games
  • Sequence — просто “разветвляет” один входной exec на несколько веток Then 0 / Then 1 / Then 2…, чтобы подряд выполнить несколько логик одновременно)
  • хотя конечно я читал о том что старт выполнения следует друг за другом , однако с такой небольшой разницей что нам на это все равно
  • Очень удобная штука

Movement Component → Velocity — берет вектор скорости из CharacterMovementComponent.

Velocity— это скорость движения персонажа в виде 3 чисел (X, Y,

  • направление — куда он движется,
  • величина — насколько быстро (м/с или см/с в UE).

Set Velocity — сохраняют этот вектор в переменную Velocity в ABP (чтобы дальше использовать в расчётах).

Vector Length XY — считают длину скорости только по X/Y (по земле), игнорируя Z (прыжок/падение).

Set Ground Speed — сохраняют результат в GroundSpeed (обычно идёт в BlendSpace как параметр Speed).

Разбор EventGraph в ABP на примере персонажа от Epic Games

Идем дальше

Разбор EventGraph в ABP на примере персонажа от Epic Games

Get Actor Rotation (Character) — берут текущий поворот персонажа (куда он “смотрит”).

Разбор EventGraph в ABP на примере персонажа от Epic Games

Calculate Direction

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

Разбор EventGraph в ABP на примере персонажа от Epic Games

(Velocity+ Get Actor Rotation втыкаем в нее )

Clamp (Float) -45…+45 — ограничивают угол, чтобы не включались анимация назад , когда персонаж быстро разворачивается и у нас включена галочка Orient Rotation To Movement ( честно говоря если убрать Clamp - разница не будет большой на дефольтных настройках от эпиков )

Однако если вы поставите скажем Rotation Rate c 500 на 180 в блюпринте персонажа (BP_ThirdPersonCharacter) то разницу можно увидеть - вот видео

Как видите персонажа использует анимацию бега назад при развороте

Movement Component → Orient Rotation to Movement

Разбор EventGraph в ABP на примере персонажа от Epic Games

Включено (True): Персонаж всегда разворачивается носом в ту сторону, куда вы жмете кнопки WASD или стик

Включается в Movement Component блюпринте персонажа

Разбор EventGraph в ABP на примере персонажа от Epic Games

Select — выбирает:

если Orient Rotation To Movement включен используется , берут Clamp (угол режут до ±45),

если выключен → берут полный угол из Calculate Direction. ( у нас будут стрейфы)

Set Direction — сохраняют итоговый угол в переменную Direction

Идем дальше

Тут они вычисляют двигается персонаж или нет

  • Берут GroundSpeed и проверяют > 0.01 (чтобы мелкий дрейф/шум не считался движением).
  • Берут Current Acceleration из Movement Component и проверяют, что она не нулевая (то есть есть input/ускорение).
  • Склеивают это через ноду AND.

И если оба условия совпадают - у нас будет True в Should Move

  • Результат записывают в ShouldMove.
Разбор EventGraph в ABP на примере персонажа от Epic Games

Current Acceleration

Это ваш ввод (Input). Как только вы нажали клавишу движения — ускорение появилось. Как только отпустили — оно мгновенно стало 0, хотя персонаж по инерции еще может немного проскользить (Velocity ещё не 0).

Еще немного)

Тут мы узнаем падает ли наш персонаж или нет - обращаясь в Movement component и записываем данные в переменную IsFalling

Разбор EventGraph в ABP на примере персонажа от Epic Games

Рассмотри несколько примерно использования созданных эпиками переменных

Зайдем в AnimGraph > Locomotion > Walk/Run (State)

Тут мы увидим что переменные Direction + Ground Speed - используется в BS_Idle_Walk_Run

Разбор EventGraph в ABP на примере персонажа от Epic Games

Это Blend Space

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

Основные виды:

  • 1D : работает по одной оси (только по Скорости). Идеально для простых пробежек вперёд.
  • 2D): работает по двум осям (например, Скорость + Направление). Нужно для стрейфов, чтобы персонаж мог плавно переходить от бега вперёд к бегу боком или по диагонали.

Если его открыть дважды щелкнув мышкой по Blendspace Player ,то можно увидеть такую картину

Разбор EventGraph в ABP на примере персонажа от Epic Games

Соответственно - ноду Direction мы воткнули в input (Horizontal Axis) названный Direction , а ноду Speed в Vertical Axis input Speed

Тут видим сетку в которой расставлены анимации в зависимости от скорости и направления

Разбор EventGraph в ABP на примере персонажа от Epic Games

Скорость с которой может бежать персонаж мы настраиваем тут в Character Movement блюпринта персонажа

Разбор EventGraph в ABP на примере персонажа от Epic Games

Настройки сетки для BS (BlendSpace2D) здесь

Разбор EventGraph в ABP на примере персонажа от Epic Games

2 Перейдем в AnimGraph >Main State >

Разбор EventGraph в ABP на примере персонажа от Epic Games

дважды по стрелочки и мы увидим что условие перехода в анимацию Fall Loop - нахождение персонажа в падении

Разбор EventGraph в ABP на примере персонажа от Epic Games

На этом все ,мы разобрали пример достаточно простого EventGraph.

мой телеграмм канал про анимацию итд, тут .

5
2
Начать дискуссию