Player Input и Input Component в Unreal Engine

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим некоторые элементы системы ввода в Unreal Engine (UE4, UE5), а именно, Player Input и Input Component.

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Player Input

Player Input — это специализированный объект в Unreal Engine, который создаётся внутри Player Controller и существует только на клиенте. Его основная задача — принимать, сохранять, обновлять и преобразовывать аппаратный ввод пользователя (нажатия клавиш, движения мыши, сигналы с геймпада) в данные, которые могут быть интерпретированы игровыми объектами, например, такими как Player Controller, Pawn или Actor.

Перевод официальной справки: Player Input — объект внутри Player Controller, который обрабатывает вводимые игроком данные. В сетевых играх существует только на клиенте.

Входящие данные (состояния всех клавиш и осей) Player Input хранит в специализированной карте Key State Map, где для каждой клавиши или оси отслеживается, находится ли она в нажатом состоянии, как долго удерживается, а для аналоговых осей — текущее значение. Это позволяет точно определять, какие действия или оси активны в данный момент, и корректно реагировать на их изменения.

Преобразование входных данных происходит путём двух видов сопоставлений:

  • Action Mappings (сопоставление действий) — позволяют связывать дискретные события ввода (простое нажатие или отжатие кнопки) с пользовательскими именами действий, которые затем могут быть обработаны игровым кодом. Например, однократное нажатие клавиши «Пробел» можно сопоставить с пользовательским действием Jump (прыжок).
  • Axis Mappings (сопоставление осей) — используются для непрерывных сигналов, таких как оси аналогового джойстика или перемещения мыши, и позволяют плавно передавать значения, отражающие степень воздействия на элемент управления. Например, постоянное нажатие клавиши «W» для непрерывного движения вперед можно сопоставить с пользовательской осью Move Forward (движение вперед).

Оба типа сопоставлений настраиваются через конфигурационные файлы проекта и могут быть изменены в редакторе Unreal Engine в настройках проекта Edit / Project Settings / Engine — Input, что обеспечивает гибкость и удобство настройки управления.

Создание сопоставлений Action Mappings и Axis Mappings для Player Input в настройках проекта
Создание сопоставлений Action Mappings и Axis Mappings для Player Input в настройках проекта

Player Input поддерживает работу не только с классическими устройствами ввода, такими как клавиатура и мышь, но и с более специализированными устройствами, включая сенсорные экраны и контроллеры игровых консолей. Это становится возможным благодаря гибкой архитектуре системы ввода Unreal Engine: все события от таких устройств агрегируются на уровне движка (специализированного модуля обработки низкоуровневых событий), после чего становятся доступны для обработки в Player Input.

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

Параметры осей в Player Input
Параметры осей в Player Input

Как работает Player Input

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

Далее эти накопленные входящие данные поступают в Local Player (представляет конкретного локального пользователя в движке), и он, в свою очередь, переправляет их в текущий Player Controller (представление игрока в игре), внутри которого находится объект Player Input, хранящий состояние всех клавиш, осей и других элементов управления.

В итоге все агрегированные входящие данные поступают именно в Player Input, который хранит и обновляет состояния входящих данных и после преобразует их в понятные движку оси (Axis) и действия (Action).

Далее в процесс вступает Input Component.

Input Component

Input Component в Unreal Engine — это временный компонент, производный от Actor Component, предназначенный для организации реакции игровых объектов на пользовательский ввод. Обычно он создаётся динамически для таких объектов, как Pawn, Player Controller или простых Actor, и не сохраняется между сессиями. Его основная задача — выступать связующим звеном между событиями ввода, поступающими из системы ввода движка (Player Input), и обработчиками в игровом коде. А именно, он связывает Action Mappings и Axis Mappings с игровыми действиями — специальными функциями в коде C++, либо специальными событиями в Blueprint.

Input Component связывает события ввода с функциями-делегатами в Actor
Input Component связывает события ввода с функциями-делегатами в Actor

Перевод официальной справки: Input Component — временный компонент, который позволяет Актору (Actor) связывать различные типы событий ввода с функциями-делегатами. Input Components обрабатываются в порядке стека, которым управляет Player Controller, а обработка самих событий осуществляется через Player Input. Каждая привязка (Binding) может «поглотить» событие ввода, не позволяя другим компонентам в стеке обработать этот ввод.

Обработка ввода в Unreal Engine строится на принципе стека Input Components. На каждом кадре Player Controller формирует стек Input Components, в который могут входить:

  • Input Component самого контроллера;
  • Input Component управляемого Pawn;
  • Input Component любых других объектов Actor, если у них включён приём ввода (Input).

Этот стек передаётся в Player Input, который поочерёдно перебирает компоненты из стека. Для каждого компонента Player Input ищет активные события, сравнивает их с биндингами и вызывает внутри перебираемого в стеке Input Component соответствующие события-делегаты на C++ или в Blueprint.

При этом Input Components располагаются в стеке в приоритетном порядке (от самого высокого приоритета к самому низкому) следующим образом:

  1. Actor: на самый верх стека ставятся компоненты от Акторов, у которых включён приём входящих данных (Enable Input или Auto Receive Input), начиная с самого последнего, у которого был включён этот параметр.
  2. Controllers: контроллеры.
  3. Level Script: скрипт уровня.
  4. Pawn: Пешки

Enhanced Input

Enhanced Input: улучшенная система обработки пользовательского ввода в UE5
Enhanced Input: улучшенная система обработки пользовательского ввода в UE5

Enhanced Input — это современная, модульная и гибкая система обработки пользовательского ввода, встроенная по умолчанию в Unreal Engine 5. Она разработана для расширения и постепенной замены классической системы ввода (Player Input) из Unreal Engine 4, при этом поддерживает полную обратную совместимость с ней.

Enhanced Input предоставляет разработчикам расширенные возможности по динамическому управлению привязками устройств ввода (клавиатура, мышь, геймпад) с различными игровыми действиями ввода (Input Actions), например, такими как прыжок, стрельба или передвижение. Поддерживает сложную логику ввода, в том числе радиальные мёртвые зоны (Dead Zones), активация сложных сочетаний клавиш (Chorded Actions), контекстное управление вводом и приоритеты обработки.

Центральной идеей Enhanced Input является использование контекстов сопоставления (Input Mapping Context): это наборы игровых действий ввода (Input Actions), которые можно динамически активировать или деактивировать в зависимости от состояния игрока или игровой ситуации. Например, разные Mapping Context могут использоваться при управлении пешим персонажем, вождения транспортом, или для разных режимов (мультиплеер, одиночная игра), при этом возможен удобный автоматический приоритет между разными контекстами.

Подробнее о системе улучшенного ввода для UE5 Вы можете узнать в отдельной статье: Enhanced Input.

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.


наш Телеграм канал

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

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