Ввод игрока: Enhanced Input
Урок про современную систему обработки ввода Unreal — Enhanced Input.
Enhanced Input — это система ввода Unreal, где абстрактные действия (Input Action) отделены от конкретных клавиш, которые задаются в контексте (Input Mapping Context).
Зачем отделять действие от клавиши
Раньше ввод привязывали жёстко: «клавиша Space → прыжок». Это неудобно: трудно переназначить управление, поддержать геймпад и менять схему по ситуации. Enhanced Input вводит слой абстракции. Вы создаёте Input Action — например, «Прыжок» — как самостоятельную сущность. Какая именно клавиша его вызывает, описывается отдельно в Input Mapping Context. Это позволяет легко менять раскладку и иметь разные схемы (в меню одна, в игре другая).
Три ключевые сущности
| Сущность | Роль |
| Input Action (IA) | Абстрактное действие: Прыжок, Движение, Огонь |
| Input Mapping Context (IMC) | Карта: какая клавиша/стик запускает какое действие |
| Modifier / Trigger | Обработка ввода: инверсия оси, мёртвая зона, удержание |
Поток обработки ввода
Игрок нажал клавишу
|
[Input Mapping Context] -- сопоставляет клавишу с действием
|
[Input Action: Jump] -- абстрактное действие сработало
|
[Обработчик в Blueprint/C++] -- персонаж прыгаетТипы значений действия
Action может выдавать разные данные. Для прыжка достаточно булева (нажато/нет). Для движения нужна ось или вектор: например, Axis2D даёт пару значений X и Y от стика или клавиш WASD. Modifier'ы по пути могут инвертировать ось или применить мёртвую зону геймпада.
Как это подключают
Чтобы контекст заработал, его добавляют игроку при старте — обычно в BeginPlay персонажа через подсистему ввода. После этого действия из этого контекста начинают приходить. В Blueprint каждое действие даёт событие (Triggered, Started, Completed), к которому привязывают логику.
Как работает под капотом
Когда приходит аппаратный ввод, подсистема Enhanced Input смотрит активные Mapping Context (их может быть несколько, с приоритетами), находит сопоставленные действия, прогоняет значение через модификаторы и триггеры, а затем рассылает события привязанным обработчикам. Приоритеты контекстов решают конфликты: контекст меню может «перебить» игровой.
Частые ошибки
- Забыть добавить Mapping Context. Без активного контекста действия не приходят — ввод «мёртв».
- Путать Started и Triggered. Started срабатывает в момент нажатия, Triggered — пока условие триггера выполняется.
- Жёстко завязываться на клавишу. Вся идея системы — работать через абстрактные действия.
Несколько контекстов и приоритеты
Сила Enhanced Input раскрывается, когда контекстов несколько. Представьте: в обычной игре активен контекст движения и стрельбы. Игрок открывает меню — вы добавляете контекст меню с высоким приоритетом, и его действия (навигация, выбор) перехватывают ввод, а игровой контекст временно «глохнет». Закрыли меню — убрали контекст, игровое управление вернулось. Так одни и те же клавиши осмысленно работают по-разному в разных ситуациях, без громоздких проверок «а мы сейчас в меню?».
Похоже устроены и контекстные действия: сел в машину — добавился контекст вождения с педалями и рулём; вышел — убрался. Контексты как слои, накладываемые и снимаемые по ходу игры, с приоритетами, разрешающими конфликты. Это куда чище старого подхода, где всё управление жило в одном месте и обрастало флагами состояний.
Итоги
- Enhanced Input отделяет действия (IA) от клавиш (IMC).
- Modifier'ы и Trigger'ы обрабатывают ввод: инверсия, мёртвая зона, удержание.
- Контекст добавляют игроку при старте; контексты имеют приоритеты.
- Каждое действие даёт события Started, Triggered, Completed.