Для начала убедитесь, что в проекте создан ассет IA_Move (Input Action). Откройте его и установите параметр Value Type в значение Axis2D (Vector2D). Это позволит одной Input Action одновременно обрабатывать две оси: X отвечает за движение влево и вправо, а Y — за движение вперед и назад. Благодаря этому вся логика перемещения будет работать через один вектор, а не через несколько отдельных действий.
Затем откройте IMC_Default (Input Mapping Context), нажмите + Add Mapping и выберите IA_Move. После этого необходимо добавить привязки клавиш.
Для клавиши направления вперед назначьте клавишу W и добавьте модификатор Swizzle Input Axis Values. По умолчанию цифровой ввод клавиш поступает по оси X, а модификатор Swizzle переносит это значение на ось Y. В результате при нажатии W действие будет возвращать вектор (0, 1), соответствующий движению вперед.
Для клавиши направления назад также назначьте клавишу S, затем добавьте два модификатора: сначала Swizzle Input Axis Values, а затем Negate. Первый переносит значение на ось Y, а второй инвертирует его. В результате нажатие S будет возвращать вектор (0, -1), что соответствует движению назад.
Для клавиши направления вправо достаточно назначить клавишу D без каких-либо модификаторов, так как Unreal Engine по умолчанию для осей всегда возвращает вектор вправо (положительное направление по оси X), то есть вектор (1, 0).
Для клавиши направления влево назначьте клавишу A и добавьте модификатор Negate. Он инвертирует значение оси X, поэтому при нажатии A действие будет возвращать вектор (-1, 0), что соответствует движению влево.
После настройки всех клавиш итоговое соответствие будет следующим:
- W → Swizzle Input Axis Values → (0, 1)
- S → Swizzle Input Axis Values + Negate → (0, -1)
- D → без модификаторов → (1, 0)
- A → Negate → (-1, 0)
После этого необходимо зарегистрировать созданный Input Mapping Context, иначе система Enhanced Input не начнет обрабатывать ввод.
Это можно сделать, например, в Blueprint вашего Character на событии Begin Play. Для этого, последовательно вызовите Get Controller, выполните Cast to Player Controller, затем получите Enhanced Input Local Player Subsystem и вызовите узел Add Mapping Context, указав в качестве Mapping Context ваш IMC_Default. Обычно значение Priority оставляют равным 0, если в проекте используется только один контекст ввода.
После регистрации контекста все назначенные Input Action начнут получать события. Теперь при удержании клавиш W, A, S и D действие IA_Move будет возвращать соответствующий вектор Vector2D, который можно использовать для перемещения персонажа. Например, при одновременном нажатии W и D действие вернет значение (1, 1), что обеспечивает движение по диагонали без дополнительной логики.
Если после запуска игры ввод не работает, в первую очередь убедитесь, что IMC_Default был успешно добавлен в Enhanced Input Local Player Subsystem, а в настройках проекта в качестве системы ввода используется Enhanced Input.
Более подробно данную тему Вы можете изучить в статьях:
Enhanced Input в Unreal Engine и Input Mapping Context
===============
Зарегистрироваться в ЛК и скачать книгу по Blueprint: [Blueprint. Взгляд с высоты «птичьего полёта»]