Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим компонент Pawn Movement Component, отвечающий в Unreal Engine (UE5, UE4) за установление взаимосвязи компонента движения с Pawn в целях подготовки его передвижения и предоставление функционала обработки векторов пользовательского ввода (Input Vector).
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Pawn Movement Component
Pawn Movement Component — это абстрактный компонент в Unreal Engine (UE4, UE5), который устанавливает связь компонентов движения с Pawn, предоставляя систему для накопления и считывания входных данных (векторов движения) от Pawn, а также применяет физические воздействия и производит их синхронизацию по сети.
* Абстрактный компонент (Abstract Component) в Unreal Engine (UE5, UE4) — это класс компонента, объект которого не может быть создан напрямую. Он служит в качестве основы или шаблона для других, более конкретных (неабстрактных) компонентов.
Перевод официальной справки: Pawn Movement Component — компонент движения, предназначенный для использования с Pawn. Предоставляет способы накопления и считывания входных данных (Input Vector) общего назначения.
Pawn Movement Component обеспечивает строгую связь компонента движения с пешкой-владельцем (Pawn): при установке обновляемого компонента (Updated Component) Pawn Movement Component гарантирует, что этот обновляемый компонент принадлежит конкретному Pawn, и с помощью функции Get Pawn Owner можно получить ссылку на эту пешку. Это позволяет компоненту движения взаимодействовать с логикой и состоянием непосредственно своей пешки-владельца.
Одной из ключевых возможностей компонента является управление пользовательским вводом (Input Vector): компонент предоставляет внутренний метод AddInputVector(), который вызывается внутри пешки-владельца и накапливает этот вектор ввода, сохраняя его опять же непосредственно в Pawn (пешке-владельце). Затем внутренним методом ConsumeInputVector() компонент даёт возможность потребить и обнулить этот сохранённый вектор (использовать его для расчета движения). Такой процесс позволяет отделить применение пользовательского ввода от его хранения в пешке-владельце (ввод поступает и хранится в Pawn, но команды по его управлению исходят из PawnMovementComponent), что даёт большие возможности по изменению пользовательского ввода не в Pawn, где он хранится, а в дочерних компонентах движения в зависимости от вида создаваемого движения.
Важной частью функциональности PawnMovementComponent является поддержка сетевой синхронизации и физического взаимодействия. Компонент реализует методы для применения физических воздействий (сил, импульсов) с учётом сетевой репликации, что обеспечивает корректное выполнение физических действий как на сервере, так и на клиентах. В случае телепортации пешки вызывается внутренний переопределённый метод OnTeleported(), который инициирует обновление камеры на клиенте, если пешка управляется локально, чтобы избежать рассинхронизации между сервером и клиентом.
Для интеграции с навигационной системой PawnMovementComponent переопределяет метод RequestPathMove(), позволяя добавлять вектор движения, сгенерированный навигацией, как пользовательский ввод (Input Vector).
В итоге, Pawn Movement Component реализует комплексную систему обработки пользовательского ввода, сетевого взаимодействия, интеграции с физикой и навигацией, а также обеспечивает тесную связь с пешкой-владельцем. При этом конкретная реализация движения — то есть, каким образом ввод преобразуется в изменение скорости и положения — остаётся задачей производных классов.
Ключевая функциональность Pawn Movement Component
- Pawn Movement — в качестве обновляемого компонента (Updated Component) в обязательном порядке устанавливает только компонент, у которого владелец Pawn, иначе движение осуществляться не будет.
- Input Vector — управление входными векторами движения.
- Async Physics State Action — функциональность для асинхронной обработки физических воздействий.
- Add Force: приложить силу.
- Add Torque: приложить крутящий момент.
- Add Force At Position: приложить силу в позиции.
- Add Linear Velocity: добавить линейную скорость.
- Add Angular Velocity: добавить угловую скорость.
- Add Velocity At Position: добавить скорость в позиции.
- Add Linear Impulse: приложить линейный импульс.
- Add Angular Impulse: приложить угловой импульс.
- Add Impulse At Position: приложить импульс в позиции.
- Add Acceleration: добавить ускорение.
- Num Actions: количество действий.
- RPC Physics State — сетевая синхронизация физических воздействий.
- Server RPC: отправляет физическую команду на выполнение серверу.
- Multicast RPC: распространяет физическую команду всем клиентам.
* Updated Component — это целевой компонент, на который применяются все вычисления и действия, связанные с движением (обычно это Root-component).
Наследование классов
Родительский класс
Pawn Movement Component наследуется от класса Nav Movement Component, расширяя его базовым функционалом для обновления движения Pawn.

Дочерние классы
Вследствие своей абстрактности, PawnMovementComponent является родительским классом для более специализированных компонентов:
- Floating Pawn Movement — упрощённый компонент движения для плавного перемещения в воздухе или воде без сложной физики (например, для камеры или летающих объектов).
- Character Movement Component — продвинутый компонент для персонажей (Character), поддерживает ходьбу, прыжки, физику, взаимодействие с ландшафтом и гравитацию.
Blueprint-функции компонента Pawn Movement Component

- Add Input Vector — производит накопление векторов движения для последующего применения в качестве ускорения во время физического обновления.
- Consume Input Vector — возвращает и очищает аккумулированный вектор движения для использования в текущем кадре.
- Get Last Input Vector — возвращает значение вектора ввода, сохранённое при последнем вызове Consume Input Vector.
- Get Pawn Owner — возвращает ссылку на Pawn-владельца компонента движения (Pawn, который владеет Updated Component).
- Get Pending Input Vector — возвращает актуальный (ещё не обработанный) вектор ввода, накопленный в текущем кадре.
- Is Move Input Ignored — определяет, игнорируется ли в данный момент ввод движения для пешки.
- True: ввод игнорируется (отсутствует Pawn Owner или Updated Component).
- False: ввод обрабатывается.
* Updated Component — это целевой компонент, на который применяются все вычисления и действия, связанные с движением (обычно это Root-component).
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.