Input Actions в Unreal Engine 5

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

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

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

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.

Типы Input Action

Input Action может быть одного из нескольких типов, что определяет, какие значения это действие может получать и как будет использоваться. Сам тип выбирается в настройках Input Action во вкладке Details / Value Type.

Тип Input Action выбирается в настройках Details / Value Type
Тип Input Action выбирается в настройках Details / Value Type

Digital

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

Тип Digital подходит для всех случаев, когда достаточно зафиксировать лишь сам факт активации действия, без передачи каких-либо числовых значений или направлений. Это эквивалент старых Action Mapping в классической системе ввода, то есть срабатывания на простое событие — нажатие, отпускание или другой двоичный триггер.

Например, такие действия, как прыжок, перезарядка, открытие двери, активация способности, обычно реализуются как Digital.

Axis1D

Input Action типа Axis1D — это действие, предназначенное для работы с одномерными аналоговыми значениями, которые могут меняться в диапазоне (обычно от -1.0 до 1.0 или от 0.0 до 1.0). Применяется в ситуациях, где ввод поступает в форме одного float-числа, отражающего степень активации какого-либо контроллера. Это особенно актуально для:

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

При использовании Axis1D действие распознаёт не только сам факт нажатия, но и его интенсивность — что невозможно реализовать с типом Digital. Например, его можно использовать для плавного изменения скорости. Часто действия этого типа комбинируют с модификаторами (Input Modifiers), применяя инверсию значения или ограничение диапазона.

Axis2D

Input Action типа Axis2D предназначен для обработки двухмерного аналогового ввода — то есть, такого, где одновременно могут приходить значения по двум осям (например, X и Y). Этот тип действия идеально подходит для работы с двумя направлениями сразу, таких как:

  • аналоговый стик геймпада (управление камерой или передвижением персонажа),
  • управление движением с помощью клавиш WASD или стрелочек, где клавиши W и S — это одна ось, а A и D — вторая ось со значениями 1.0 и -1.0 соответственно.
  • перемещение мышью по двухмерной поверхности.

Также Axis2D часто комбинируют с модификаторами (Input Modifiers), применяя, например, Dead Zone — чтобы устранить дрожание стика в центре; Inversion — например, инвертировать Y для управления камерой; Swizzle Axes — чтобы переназначить оси при необходимости или Scale — для изменения чувствительности.

Axis3D

Input Action типа Axis3D — это действие, работающее с трёхмерными аналоговыми значениями. При обработке такого действия соответствующие Blueprint-события всегда возвращают значение типа Vector (с тремя float-компонентами: X, Y, Z).

Axis3D подходит для тех случаев, когда требуется фиксировать и обрабатывать одновременное аналоговое перемещение или направление сразу по трём осям:

  • использование VR-контроллеров (Motion Controllers) в пространстве;
  • использование 3D-джойстиков и нестандартных контроллеров;
  • управление летательным аппаратом с трёхмерным вектором направления.

Как и для других типов, поддерживаются Input Modifiers (например, чувствительность, фильтрация шума, мёртвые зоны, трансформация координат) и Input Triggers (Hold, Double Tap и так далее). Например, можно применить Dead Zone только к одной из осей, или инвертировать отдельную ось прямо на уровне Input Action.

Blueprint-события, вызываемые Input Actions

В системе Enhanced Input весь процесс обработки пользовательского ввода строится вокруг связывания Input Action с конкретными физическими кнопками, осями или другими элементами управления через Input Mapping Context.

Как уже говорилось ранее, каждое действие (Input Action) представляет собой абстрактное игровое событие — например, «Прыжок», «Передвижение», «Открыть инвентарь». Такие действия не зависят от конкретной клавиши или устройства: назначение связи между Input Action и физическими клавишами или кнопками выполняется именно в Input Mapping Context.

Когда игрок нажимает или взаимодействует с назначенной кнопкой, связанное действие Input Action автоматически активируется. После этого система Enhanced Input вызывает соответствующее этому действию Blueprint-событие — где пользователь, в итоге реализует реакцию на пользовательский ввод.

В этих событиях через параметры возвращается информация не только о самом факте срабатывания действия, но и подробные данные о фазе срабатывания (Started, Triggered и другие), типе и значении ввода.

Список выходов для этих событий (Action Value, Elapsed Seconds, Triggered Seconds, Input Action) и возможных триггеров одинаков для всех типов Input Action, которые рассматривались выше. Различается только «тип значения», который приходит в параметре Action Value: для типа Digital возвращается значение bool, для Axis1Dfloat, для Axis2DVector2D, для Axis3DVector.

Blueprint-события четырёх типов, вызываемые Input Actions
Blueprint-события четырёх типов, вызываемые Input Actions

Рассмотрим другие параметры подробнее.

  • Triggered — выход срабатывает, когда все условия активации действия выполнены, и действие считается окончательно инициированным. Для простых назначений это обычно происходит в момент нажатия соответствующей кнопки. Если к действию добавлены триггеры (например, удержание или двойное нажатие), событие Triggered произойдёт только после выполнения всех условий триггера.
  • Started — выход срабатывает в тот момент, когда начинается анализ активации действия — например, при первом нажатии кнопки или начале удержания, даже если для срабатывания ещё нужно выполнить дополнительные условия (например, дождаться истечения времени удержания для активации Triggered). Используется для отслеживания самого начала взаимодействия пользователя.
  • Ongoing — выход сообщает, что действие находится в процессе выполнения. Например, если для срабатывания требуется удерживать кнопку некоторое время, Ongoing будет срабатывать на каждом кадре, пока пользователь удерживает кнопку, но условия триггера ещё не полностью выполнены. Это удобно для реализации анимаций ожидания, таймеров или визуальной обратной связи.
  • Canceled — выход срабатывает, если процесс активации был прерван. Например, если пользователь начал удерживать кнопку (Started), но отпустил её до выполнения всех триггерных условий (например, до истечения времени удержания). Это состояние подходит для отмены действий, сброса прогресса или визуального отклика на отмену ввода.
  • Completed — выход означает, что полный процесс активации действия завершён. Все триггеры, а также связанные процедуры исполнения полностью окончились. Используется для завершения логики, например, когда нужно закрыть анимацию или вернуть интерфейс к исходному состоянию.
  • Elapsed Seconds — выход показывает, сколько времени прошло с момента начала попытки активации действия (например, с начала удержания кнопки в случае Hold Trigger). Это полезно для реализации логики, зависящей от длительности действия (например, «долго удерживать для подтверждения»).
  • Triggered Seconds — выход возвращает количество времени, в течение которого действие находится в состоянии Triggered. Например, если событие Triggered длится дольше одного кадра (или поддерживается постоянно в данном состоянии при удержании), это значение показывает, сколько времени действует Triggered. В простых триггерах это значение может быть близко к нулю.
  • Input Action — выход возвращает сам объект текущего Input Action.

Как создать и использовать Input Action

Как создать ассет Input Action: в Content Browser нажмите +Add или кликните правой кнопкой мыши по пустому месту и в появившемся меню выберите Input / Input Action
Как создать ассет Input Action: в Content Browser нажмите +Add или кликните правой кнопкой мыши по пустому месту и в появившемся меню выберите Input / Input Action
  1. Откройте Content Browser. Перейдите в папку проекта, где будут храниться ассеты Input Action.
  2. Создайте ассет Input Action: в Content Browser нажмите +Add или кликните правой кнопкой мыши по пустому месту и в появившемся меню выберите Input / Input Action. Присвойте новому ассету осмысленное имя (IA_Jump, IA_Move, IA_Fire).
  3. Настройте Input Action: откройте созданный ассет двойным щелчком. В панели Details выберите тип действия (Value Type). Можно также добавить Triggers (триггеры, условия срабатывания) и Modifiers (модификаторы), чтобы контролировать поведение действия.
  4. Свяжите Input Action с физическими кнопками: создайте или отредактируйте имеющийся Input Mapping Context, добавьте в него созданный Input Action и назначьте для этого действия клавишу, кнопку мыши или кнопку геймпада.
  5. Используйте Input Action в коде С++ или Blueprint: откройте Event Graph нужного блюпринта, нажмите ПКМ и начните набирать имя созданного Input Action — в поиске появится соответствующее Blueprint-событие. Опишите необходимую игровую логику для обработки данного события.

Как результат, нужное игровое действие будет срабатывать при нажатии (или аналоговом воздействии) на связанную кнопку/ось. При этом будет вызвано связанное Blueprint-событие (или C++ колбэк), куда поступит информация о фазе действия и его значении, что позволит реализовать необходимую игровую логику.

Настройки Input Actions во вкладке Details

Настройки Input Actions во вкладке Details
Настройки Input Actions во вкладке Details
  • Action Description — представляет собой локализуемое текстовое описание Input Action. Используется для хранения описания того, что делает данное действие ввода.
  • Trigger When Paused — определяет, должно ли данное действие ввода активироваться во время паузы в игре.
  • Reserve All Mappings — запрещает автоматическое переопределение всех привязок (Mappings) данного действия более приоритетными контекстами — изменение возможно только через явное ручное удаление, за которое отвечает пользовательский код:
    • True — привязки (Mappings) этого действия НЕ будут автоматически переопределяться контекстами с более высоким приоритетом. Чтобы изменить такую привязку, её сначала нужно явно удалить вручную.
    • False — привязки этого действия могут быть автоматически заменены маппингами из контекстов с более высоким приоритетом.
  • Value Type — тип значения, который будет возвращать это действие (Input Action) при вызове функции Get Action Value или обработке событием. В зависимости от назначенного типа, значение действия может быть булевым (Boolean), числом с плавающей точкой (Axis1D), двумерным вектором (Axis2D) или трёхмерным вектором (Axis3D). От выбранного типа зависит, как следует интерпретировать возвращаемое значение действия во время выполнения.
  • Triggers — список специальных условий срабатывания действия. По сути, это массив объектов Input Trigger, которые определяют, при каких обстоятельствах (по паттерну ввода) действие будет считаться активированным.
  • Modifiers — массив модификаторов, которые позволяют изменять итоговое значение действия (Input Action) перед его отправкой в игровую логику. Все модификаторы из этого списка применяются друг за другом в том порядке, в котором они расположены в массиве. Если для одного и того же действия заданы модификаторы как в самом Input Action (это свойство), так и в настройке сопоставления клавиш в Input Mapping Context, то сначала применяются модификаторы из Input Mapping Context, а потом, поверх — из Input Action.
  • Accumulation Behavior — определяет способ вычисления итогового значения для данного действия (Input Action), если к нему привязано сразу несколько разных кнопок или осей (Key Mappings). Влияет на то, как обрабатываются множественные совпадающие привязки к одному действию из разных Key Mapping, делая поведение либо приоритетным (Take Highest), либо суммирующим (Cumulative):
    • Take Highest Absolute Value (по умолчанию) — используется только та из привязок, у которой самое большое абсолютное значение ввода. Это удобно, например, при одновременном нажатии двух кнопок или движении нескольких стиков — учитывается только максимальный по модулю сигнал.
    • Cumulative — значения всех соответствующих привязок будут складываться между собой, формируя общее итоговое значение (например, при одновременном нажатии противоположных клавиш W и S итоговое значение станет равно нулю).
  • Consume Lower Priority Enhanced Input Mappings — определяет, будет ли данное действие (Input Action) «поглощать» пользовательский ввод — то есть, предотвращать передачу этого ввода другим действиям с более низким приоритетом. Позволяет контролировать, будет ли определённый ввод уникальным для одного действия или сможет использоваться несколькими действиями одновременно, если они находятся в разных приоритетных слоях схемы управления:
    • True (по умолчанию) — действие блокирует соответствующий ввод: когда пользователь активирует это действие, сигнал не сможет дополнительно обработаться другими действиями, которым назначена эта же кнопка или ось, но через контексты с более низким приоритетом.
    • False — нажатие или перемещение по-прежнему сможет быть обработано всеми другими подходящими действиями в менее приоритетных контекстах, как будто их не перекрыли текущим действием.
  • Consumes Action And Axis Mappings — определяет, должны ли любые сопоставления клавиш (Key Mappings) этого действия блокировать (подавлять) срабатывание старых (Legacy) Action и Axis Mappings из классической системы ввода UE4. В этом случае события для этих старых привязок не будут вызываться, даже если физическая кнопка назначена и в старой, и в новой системе:
    • True — новые Enhanced Input Actions будут полностью «заглушать» старую систему для тех же кнопок/осей.
    • False (по умолчанию) — старые и новые системы могут реагировать на одни и те же физические элементы управления одновременно.
  • Trigger Events That Consume Legacy Keys — маска, определяющая, при каких событиях триггера (Trigger Events) в Enhanced Input действие будет блокировать (Consume) связанные с ним устаревшие Action и Axis маппинги (Legacy Key Mappings) из классической системы ввода UE4. Иными словами, если свойство включено, то именно эти выбранные события (например, Triggered, Started, Completed) будут «заглушать» или отменять вызов делегатов для старых Action/Axis Mapping для той же клавиши или кнопки. Для остальных событий ввод продолжит обрабатываться и в старой системе.
  • Player Mappable Key Settings — свойство хранит объект настроек для конкретного действия ввода (Input Action), который содержит информацию, предназначенную для пользовательских экранов переназначения управления и сохранения пользовательских предпочтений.

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


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

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

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