Enhanced Input в Unreal Engine

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим систему Enhanced Input в Unreal Engine 5, предоставляющую улучшенную систему обработки пользовательского ввода в UE5.

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

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 могут использоваться при управлении пешим персонажем, вождения транспортом, или для разных режимов (мультиплеер, одиночная игра), при этом возможен удобный автоматический приоритет между разными контекстами.

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

Enhanced Input строится на четырёх ключевых элементах:

  1. Input Actions (действия ввода) — ассеты, представляющие собой абстрактные действия пользователя, например «Прыжок», «Выстрел» или «Бег», которые в последствии вызывают соответствующие этим действиям Blueprint-события. Где далее по каждому событию можно описывать Blueprint-логику данного действия (все эти процесс также возможны и в коде C++).
  2. Input Mapping Context (контексты сопоставления) — наборы Input Actions с их конкретными привязками к клавишам, кнопкам или осям. Динамическая смена Input Mapping позволяет менять правила обработки ввода прямо во время игры, в зависимости от её состояния.
  3. Input Modifiers (модификаторы ввода) — модификаторы, обрабатывающие сырые данные ввода перед их передачей триггерам.
  4. Input Triggers (триггеры ввода) — логические условия, которые определяют, когда разные Input Actions должны быть активированы.

Рассмотрим каждый из элементов Enhanced Input более подробно, а затем в конце статьи разберём общую схему работы Enhanced Input, включая все её элементы.

Ключевые элементы Enhanced Input

Input Actions

Input Actions в системе Enhanced Input (UE5)
Input Actions в системе Enhanced Input (UE5)

Input Actions (действия ввода) — элементы системы Enhanced Input, которые служат связующим звеном между аппаратным пользовательским вводом (таким как клавиши, мышь, геймпады) и ответными действиями в игре. В отличие от устаревших Action/Axis Mappings в Unreal Engine 4 (где действия описывались только строковыми именами), Input Actions реализованы как самостоятельные ассеты — объекты данных, полностью определяющие суть и поведение действия.

Каждый ассет Input Action представляет абстрактное действие, которое игрок может совершить в игре: «Прыжок», «Выстрел», «Бег», «Использовать предмет» и так далее. И для каждого такого действия в коде C++ или Blueprint соответствует своё событие, которое вызывается в момент срабатывания этого действия (Input Action).

При активации действия ввода (Input Action) - вызываются соответствующие события в C++ и Blueprint
При активации действия ввода (Input Action) — вызываются соответствующие события в C++ и Blueprint

Сама же связь между физической кнопкой и действием (Input Action) происходит позже, при настройке Mapping Context.

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

Input Mapping Context

Input Mapping Context в системе Enhanced Input (UE5)
Input Mapping Context в системе Enhanced Input (UE5)

Input Mapping Context (контекст сопоставления ввода) — это один из ключевых элементов системы Enhanced Input, который представляет собой ассет, содержащий набор правил, определяющих, какие Input Actions (действия пользователя) с какими конкретно клавишами, кнопками или осями связаны и какие при этом применяются особенности обработки ввода.

Действию ввода IA_Move сопоставлено нажатие кнопок WASD, действию ввода IA_Block сопоставлено нажатие кнопки Space Bar
Действию ввода IA_Move сопоставлено нажатие кнопок WASD, действию ввода IA_Block сопоставлено нажатие кнопки Space Bar

В Unreal Engine использование системы Enhanced Input и ассетов Input Mapping Context позволяет гибко управлять действиями, которые выполняет одна и та же клавиша в разных игровых ситуациях. Это обеспечивает максимально интуитивное и удобное взаимодействие для игрока, когда значение конкретной клавиши может динамически меняться в зависимости от текущего режима персонажа.

Рассмотрим пример с клавишей пробел (Space): предположим, у персонажа есть два ключевых режима — «свободное перемещение» и «боевой режим». Для каждого из них создаются отдельные ассеты Input Mapping Context:

  • IMC_Move (контекст перемещения): здесь нажатие пробела (Space) связано с действием «Прыжок» (IA_Jump) — персонаж прыгает.
  • IMC_Battle (контекст боя): здесь пробел (Space) уже вызывает действие «Блок» (IA_Block) — персонаж поднимает щит или ставит блок для защиты.

Когда персонаж просто идёт или исследует мир, активен контекст IMC_Move: нажатие пробела вызывает «Прыжок», что соответствует стандартному ожиданию игрока. Однако, при переходе в боевой режим система динамически активирует IMC_Battle — теперь это же нажатие пробела не выполняет прыжок, а включает «Блок» для защиты от атак.

Благодаря приоритетам и возможности в любой момент добавить или удалить нужный Mapping Context (как через Blueprint, так и в C++), избегаются конфликты управления и сложной ручной реализации смены действия для каждой кнопки. Такой подход даёт разработчику абсолютную свободу в построении продвинутых схем управления: например, при открытии меню, езде на транспорте или в иных игровых ситуациях любая клавиша может приобретать новый смысл — быстро, безопасно и прозрачно для логики проекта.

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

Input Modifiers

Input Modifiers в системе Enhanced Input (UE5)
Input Modifiers в системе Enhanced Input (UE5)

Input Modifiers (модификаторы ввода) — это специальные элементы системы Enhanced Input, отвечающие за предварительную обработку «сырых» значений пользовательского ввода, ещё до того, как они будут переданы в игровой код или оценены триггерами. Они работают в качестве фильтров и преобразователей, модифицируя поступающую величину в зависимости от заданных правил, чтобы превратить данные с физических кнопок, стиков или других устройств в более осмысленный и удобный для логики игры вид.

Модификаторы применяются к значению ввода последовательно, в том порядке, в котором они заданы. Это значит, что результат работы одного Input Modifier отдаётся на вход следующему. Такой подход позволяет комбинировать самые разные эффекты: сначала отфильтровать шум (например, отклонения в центре стика), затем, возможно, инвертировать ось, после чего уже усилить чувствительность или масштабировать величину. Всё это происходит до того, как система начнёт анализировать триггеры — то есть, пользователь получает максимально «чистый» и откалиброванный ввод.

С точки зрения архитектуры Enhanced Input, Input Modifiers делают схему управления универсальной и легко настраиваемой. Разработчики могут менять поведение кнопок или осей без переписывания логики, просто изменяя параметры модификаторов для конкретных кнопок или целых Input Actions. Более того, модификаторы можно создавать самостоятельно, расширяя функциональность через Blueprint или C++ — что открывает дорогу для особых сценариев, уникальных для конкретной игры.

Рассмотрим стандартные модификаторы ввода, которые уже определены в системе Enhanced Input.

  • Dead Zone (мёртвая зона) — модификатор мёртвой зоны применяется к аналоговым осям (например, стикам геймпада) и игнорирует малые отклонения от центра. Благодаря такому подходу игра не реагирует на небольшие колебания стика, что предотвращает дрожание персонажа или камеры, когда пользователь стик не трогает или его центр неидеален. Параметры:
    • Lower Threshold — минимальное значение, ниже которого вход игнорируется.
    • Upper Threshold (опционально) — максимальное значение, выше которого сигнал принимается как максимальный.
    • Dead Zone Type — применение логики мертвой зоны: Radial — применяется сразу ко всем осям одновременно, Axis — логика применяется индивидуально по каждой из осей.
  • FOV Scaling — модификатор масштабирует входящее значение с учётом текущего поля зрения (Field of View). Параметры:
    • FOV Scale — дополнительное скалярное значение, применяемое помимо базового масштабирования FOV.
    • FOV Scaling Type — тип масштабирования: Standart — стандартное масштабирование для UE5, UE4 Back Compat — тип масштабирования для обратной совместимости с UE4 .
  • Negate — модификатор, который инвертирует (меняет знак) входного значения. Применяется, если нужно, чтобы положительное значение становилось отрицательным и наоборот. Это полезно для переназначения направления движения или смены ориентации оси. Параметры:
    • Negate X — инвертировать X.
    • Negate Y — инвертировать Y.
    • Negate Z — инвертировать Z.
  • Response Curve — Exponential — применяет к входному значению экспоненциальную функцию. Параметры:
    • Curve Exponent — степень, с которой возводится значение. Чем выше экспонента, тем сильнее выражен нелинейный характер.
  • Response Curve — User Defined — пользовательская кривая преобразования входного значения.
  • Scalar — скалярный модификатор, умножающий значение входа на определённый коэффициент. Используется для регулировки чувствительности — например, чтобы персонаж двигался быстрее или медленнее в зависимости от пользовательских настроек или особенностей устройства. Параметры:
    • Scalar — множитель для каждой оси.
  • Scale By Delta Time — масштабирует (умножает) входное значение на прошедшее за кадр время (Delta Time). Используется для нормализации ввода по времени, чтобы скорость двигалась одинаково вне зависимости от частоты кадров.
  • Smooth (смягчение) — задаёт плавное изменение значения входа между кадрами. Снижает резкие скачки и позволяет вводам (например, движению мыши или камеры) меняться более мягко и предсказуемо.
  • Smooth Delta — применяет сглаживание ко входному значению между кадрами, делая резкие изменения более плавными.
    • Smoothing Method — метод сглаживания (например, линейное или экспоненциальное усреднение).
    • Speed — скорость сглаживания: чем выше значение, тем быстрее кривая стремится к входному значению.
    • Easing Exponent — степень сглаживания для функций методов Ease (Smoothing Method).
  • Swizzle Input Axis Values — переставляет местами отдельные компоненты входного вектора. Например, значения с оси X можно переназначить на Y, Z или иные комбинации (YXZ, ZXY и пр.). Особенно актуально для объединения одномерных входов (WASD) в двумерные или трёхмерные Input Action. Параметры:
    • Order — последовательность вывода. Задаёт, в какие места поступают исходные значения.
  • To World Space — преобразует входной вектор в мировую систему координат.

Input Trigger

Input Triggers в системе Enhanced Input (UE5)
Input Triggers в системе Enhanced Input (UE5)

Input Triggers (триггеры ввода) — элементы системы Enhanced Input, отвечающие за определение момента, когда пользовательский ввод действительно должен активировать соответствующее действие (Input Action).

В отличие от классического подхода, где любое нажатие кнопки или движение стика сразу считается сигналом к действию, Input Triggers позволяют гибко управлять условиями срабатывания: обработка нажатий, коротких или длинных удержаний, последовательностей вводов — всё это задаётся именно благодаря триггерам.

Работа Input Trigger начинается после того, как сырое значение ввода прошло через цепочку Input Modifiers. Триггер анализирует скорректированное значение и определяет, выполнены ли его условия для активации действия.

Например, если назначен триггер Hold, действие выполнится только в том случае, если клавиша удерживается не менее заданного времени; если назначен классический триггер Pressed, действие сработает при обычном клике. Для каждого действия можно задать несколько триггеров, которые будут проверять самые разные комбинации условий, позволяя реализовать сложные варианты управления.

Также, для каждого триггера имеется 5 типов состояний:

  1. Triggered — все требования триггера выполнены, и действие считается активированным.
  2. Started — состояние отмечает момент, когда началось выполнение условий триггера.
  3. Ongoing — условия триггера частично выполнены, но ещё не все — процесс проверки продолжается.
  4. Canceled — состояние означает, что цепочка выполнения триггера была прервана до достижения условий активации.
  5. Completed — состояние означает завершение проверки и исполнения триггера.

Состояния триггеров позволяют гибко реагировать на разные фазы ввода в Blueprints и C++. Например, можно запустить анимацию и эффект при состоянии Started, отслеживать удержание в Ongoing, выполнять действие в Triggered или прерывать логику при Canceled.

Состояние триггера: Triggered, Started, Ongoing, Canceled, Completed
Состояние триггера: Triggered, Started, Ongoing, Canceled, Completed

 

В итоге Triggers превращают работу с пользовательским вводом из простого «реакция на нажатие» в тонко настраиваемую систему, которую разработчик полностью контролирует и адаптирует под разные игровые ситуации.

Также, как и с модификаторами, триггеры также можно создавать самостоятельно, расширяя функциональность через Blueprint или C++. Либо же можно использовать стандартные, заранее определённые в системе Enhanced Input.

Стандартные триггеры в системе Enhanced Input (UE5)
Стандартные триггеры в системе Enhanced Input (UE5)
  • Chorded Action — триггер активируется только вместе с другим действием (Input Action). Параметры:
    • Chord Action — выбор действия (Input Action), которое должно быть активировано для активации данного триггера.
    • Actuation Threshold — порог для срабатывания триггера.
  • Combo (Beta) — триггер активируется только тогда, когда все действия (Input Action) будут выполнены. Параметры:
    • Combo Actions — массив действий (Input Actions), которые необходимо выполнить.
    • Cancel Actions — массив действий (Input Actions), которые отменяют комбинацию, если они завершены.
    • Actuation Threshold — порог для срабатывания триггера.
  • Down — триггер срабатывает, когда значение ввода превышает порог срабатывания. Параметры:
    • Actuation Threshold — порог для срабатывания триггера.
  • Hold — срабатывает только если ввод удерживается определённое время. Очень полезен для «долгого нажатия» (например, удержание для альтернативного действия). Параметры:
    • Hold Time Threshold — время, которое нужно удерживать кнопку.
    • Is One Shot — если True, триггер срабатывает только один раз за цикл удержания.
    • Affected by Time Dilation — если задано значение True, будет использоваться замедление времени Актора контроллера игрока при расчёте Hold Time Threshold.
    • Actuation Threshold — порог для срабатывания триггера.
  • Hold And Release — срабатывает, когда ввод удерживается дольше заданного времени и после отпускают. Параметры:
    • Hold Time Threshold — минимальное время удержания перед отпусканием.
    • Affected by Time Dilation — если задано значение True, будет использоваться замедление времени Актора контроллера игрока при расчёте Hold Time Threshold.
    • Actuation Threshold — порог для срабатывания триггера.
  • Pressed — триггер срабатывает один раз, только после того, как входное значение превысит заданный порог. Параметры:
    • Actuation Threshold — порог для срабатывания триггера.
  • Pulse — периодически (пульсом, через заданный интервал) активирует действия, пока пользователем удерживается ввод (например, автоогонь при зажатии кнопки). Параметры:
    • Trigger on Start — активировать триггер сразу, при достижении порога или отложить до первого интервала
    • Interval — время между повторными срабатываниями (в секундах).
    • Trigger Limit — количество срабатываний триггера, пока пользователем удерживается ввод (0без ограничений).
    • Affected by Time Dilation — если задано значение True, будет использоваться замедление времени Актора контроллера игрока при расчёте Interval.
    • Actuation Threshold — порог для срабатывания триггера.
  • Released — триггер срабатывает один раз, только после того, как входное значение становится ниже заданного порога. Параметры:
    • Actuation Threshold — порог для срабатывания триггера.
  • Tap — срабатывает, если ввод был выполнен быстро, за время, не превышающее заданного порога (краткое нажатие). Параметры:
    • Tap Release Time Threshold — максимальное время для короткого нажатия.
    • Affected by Time Dilation — если задано значение True, будет использоваться замедление времени Актора контроллера игрока при расчёте Tap Release Time Threshold.
    • Actuation Threshold — порог для срабатывания триггера.

Enhanced Input Local Player Subsystem

Enhanced Input Local Player Subsystem (усовершенствованная подсистема входных данных для локального игрока) в Unreal Engine 5 (UE5)
Enhanced Input Local Player Subsystem (усовершенствованная подсистема входных данных для локального игрока) в Unreal Engine 5 (UE5)

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

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

Важной особенностью работы Enhanced Input Local Player Subsystem является её способность управлять приоритетами контекстов ввода. Если несколько контекстов претендуют на одно и то же устройство ввода, система использует заданный при добавлении приоритет, чтобы определить, какой из них будет обрабатываться в первую очередь. Такой подход делает систему управления более предсказуемой и организованной, особенно в сложных проектах с множеством взаимодействующих модулей.

Сам процесс добавления, удаления и расстанови приоритетов для Input Mapping Contexts в Enhanced Input Local Player Subsystem в Blueprint осуществляется при помощи 3 специализированных функций.

Blueprint-функции для работы с контекстами в Enhanced Input Local Player Subsystem
Blueprint-функции для работы с контекстами в Enhanced Input Local Player Subsystem
  • Add Mapping Context — добавляет указанный Input Mapping Context (контекст сопоставления ввода) для выбранного игрока/субсистемы. Позволяет динамически переключать схемы управления в зависимости от ситуации.
  • Remove Mapping Context — безопасно удаляет конкретный Input Mapping Context для игрока/субсистемы. Функцию можно безопасно вызывать, даже если этот контекст не был ранее применён.
  • Has Mapping Context — проверяет, добавлен ли указанный Input Mapping Context к выбранному игроку/субсистеме. Позволяет программно определить, активен ли контекст, а также возвращает его приоритет.

Таким образом, Enhanced Input Local Player Subsystem играет центральную роль в современной системе ввода Unreal Engine 5. Она обеспечивает гибкое и структурированное управление вводом, поддерживает динамическую смену контекстов, обработку приоритетов и инъекцию ввода, что делает её важным элементом при разработке проектов с богатым пользовательским интерфейсом и высокой степенью настраиваемости.

Процесс работы Enhanced Input

Пример общей схемы процессов в Enhanced Input (в зависимости от игровой ситуации выбирается разный контекст и нажатие одной и той же кнопки Space Bar производит вызов совершенно разных событий)
Пример общей схемы процессов в Enhanced Input (в зависимости от игровой ситуации выбирается разный контекст и нажатие одной и той же кнопки Space Bar производит вызов совершенно разных событий)
  1. Считывание пользовательского ввода: физические сигналы с устройств (клавиатура, мышь, геймпад) принимаются низкоуровневой системой ввода Unreal Engine 5.
  2. Обработка в Enhanced Input Local Player Subsystem: подсистема игрока управляет активными схемами ввода (Input Mapping Contexts) и определяет, какие контексты действуют для конкретного игрока в данный момент.
  3. Выбор и применение Input Mapping Contexts: в каждом контексте описано, какие устройства и кнопки соответствуют различным Input Actions. Текущие активные контексты определяют доступные действия и их приоритет.
  4. Активация Input Actions: сопоставленные действия (например, «движение», «прыжок») получают значения ввода в соответствии с выбранным контекстом и типом (bool, float, vector).
  5. Обработка через Input Modifiers: входные данные проходят через модификаторы, изменяющие их форму — например, фильтрация мёртвой зоны, инверсия оси или сглаживание.
  6. Проверка условий Input Triggers: триггеры анализируют обработанный ввод и определяют, должны ли условия для активации действия считаться выполненными (например, простое нажатие, удержание или двойной клик).
  7. Генерация событий с состояниями и финальным значением: при выполнении всех условий Input Action вызывает событие в Blueprint или C++, в котором доступны состояние триггера (Triggered, Started, Ongoing, Completed, Canceled) и модифицированное значение ввода (Input Action).

Как результат, пользовательский ввод проходит путь: контроллер/мышь/клавиши > Система ввода UE5 > Enhanced Input Local Player Subsystem > Input Mapping Context > Input Action (Modifiers + Triggers) > вызов события (Blueprint/C++) содержащего состояние триггера (Triggered, Started, Ongoing, Canceled, Completed) и модифицированное значение ввода (Input Action).

Всю цепочку (особенно контексты и действия) можно изменять на лету, что позволяет не только реализовать разные раскладки управления для разных режимов геймплея, но и добавлять новые схемы, приоритеты и даже создавать уникальные действия во время игры. Благодаря этому Enhanced Input даёт максимально гибкую архитектуру ввода для современных проектов в UE5.

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


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

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

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