unreal-enhanced-input
gamedev-skills/awesome-gamedev-agent-skills
Set up player input in Unreal Engine 5 with Enhanced Input system: Input Actions, Mapping Contexts, modifiers, and triggers.
What is unreal-enhanced-input?
The Enhanced Input system is UE5's modern, data-driven approach to player input using Input Actions (IA_) and Input Mapping Contexts (IMC_) instead of legacy Project Settings mappings. Use this skill when wiring movement, look, jump, or fire input, creating input assets, applying modifiers and triggers, or binding actions in C++ or Blueprints.
- Create and configure Input Actions with value types (Digital, Axis1D, Axis2D)
- Design Input Mapping Contexts that map keys/buttons to actions with modifiers and triggers
- Add mapping contexts to players via EnhancedInputLocalPlayerSubsystem with priority management
- Bind actions to handlers by ETriggerEvent (Triggered, Started, Completed) in C++ or Blueprints
- Read FInputActionValue in handlers and route input to movement, look, and action systems
- Debug input state with Enhanced Input console commands (showdebug enhancedinput)
How to install unreal-enhanced-input
npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill unreal-enhanced-input- Unreal Engine 5.8 or later (Enhanced Input is default; legacy input deprecated)
- EnhancedInput module added to PublicDependencyModuleNames in *.Build.cs for C++ binding
- A Character or Pawn class with SetupPlayerInputComponent override
How to use unreal-enhanced-input
- 1.Create Input Action assets (IA_Move, IA_Look, IA_Jump) with appropriate Value Types (Axis2D for movement, Axis1D for triggers, Digital for buttons)
- 2.Create an Input Mapping Context asset (IMC_Default) and map keys/buttons to those actions
- 3.Apply Modifiers (Negate, Swizzle Input Axis Values, Dead Zone) to shape raw input correctly, especially for multi-key axes like WASD
- 4.Configure Triggers (Pressed, Hold, Tap) on each mapping to define when the action fires
- 5.In your Character's BeginPlay, get the EnhancedInputLocalPlayerSubsystem and call AddMappingContext(IMC_Default, Priority 0)
- 6.In SetupPlayerInputComponent, cast InputComponent to UEnhancedInputComponent and bind actions with BindAction(Action, ETriggerEvent, Handler)
- 7.In your handler functions, read the FInputActionValue and extract the appropriate type (Get<FVector2D>(), Get<float>(), Get<bool>())
- 8.Test in PIE and use showdebug enhancedinput console command to verify actions trigger and values are correct
Use cases
- Wiring WASD movement and mouse look for a first-person or third-person character
- Binding jump input with Started/Completed events to trigger and stop jump animations
- Creating a rebindable control scheme by swapping or layering mapping contexts
- Applying modifiers (Negate, Swizzle, Dead Zone) to raw input for correct axis mapping
- Setting up context-sensitive input (e.g., different actions in menu vs. gameplay)
- Unreal Engine 5 gameplay programmers building character controllers
- Game designers setting up player input and control schemes
- Developers migrating from legacy input to Enhanced Input
- Teams implementing rebindable or context-aware input systems
unreal-enhanced-input FAQ
Input Actions (IA_) define *what* input can happen (e.g., Move, Look, Jump) and their value type (Digital, Axis1D, Axis2D). Input Mapping Contexts (IMC_) define *how* physical keys/buttons map to those actions, including modifiers and triggers. One action can be mapped in multiple contexts.
Axis2D input requires Modifiers to work correctly. Add a Negate modifier to the negative keys (A, S) and a Swizzle Input Axis Values modifier to the vertical keys (W/S) so both axes map to the correct forward/right vectors.
Bind the same action twice with different ETriggerEvents: BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump) for press, and BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping) for release.
This usually means the mapping context was never added to the player. Ensure you call AddMappingContext in BeginPlay or after possession, and verify the player has a valid Local Player via the PlayerController.
Yes. Mapping contexts stack by Priority; higher-priority contexts are checked first. Use AddMappingContext and RemoveMappingContext to layer contexts (e.g., UI overlay on top of gameplay) and manage conflicts.
Full instructions (SKILL.md)
Source of truth, from gamedev-skills/awesome-gamedev-agent-skills.
name: unreal-enhanced-input description: > Set up player input in Unreal Engine 5 with Enhanced Input: Input Actions, Input Mapping Contexts, modifiers and triggers, adding the mapping context, and binding actions by ETriggerEvent. Use when wiring movement/look/jump input, creating IA_/IMC_ assets, binding in C++ or Blueprints, or when the user mentions Enhanced Input, Input Mapping Context, Input Action, IA_/IMC_, or ETriggerEvent.
Unreal Enhanced Input
Wire player input the modern UE5 way with the Enhanced Input system: data-driven Input Actions and Mapping Contexts instead of the legacy Project Settings axis/action mappings. Targets UE 5.8 (Enhanced Input is the default; legacy input is deprecated).
When to use
- Use when adding movement/look/jump/fire input, creating Input Action (
IA_) and Input Mapping Context (IMC_) assets, applying modifiers/triggers, adding a mapping context to a player, or binding actions in C++ or Blueprints. - Use when the project has
IA_*/IMC_*assets or referencesEnhancedInput.
When not to use: engine-agnostic input architecture (rebinding strategy, buffering,
multi-device design) → input-systems. The Pawn/Character C++ those bindings live in →
unreal-cpp-gameplay.
Core workflow
- Enable the module/plugin. Enhanced Input is on by default in UE5; for C++ binding add
"EnhancedInput"toPublicDependencyModuleNamesin*.Build.cs. - Create Input Actions (
IA_). Each has a Value Type:Digital (bool)for buttons,Axis1D (float)for triggers,Axis2D (Vector2D)for movement/look. - Create an Input Mapping Context (
IMC_) that maps keys/buttons to those actions. Use Modifiers to shape raw input (Negate, Swizzle Input Axis Values, Dead Zone) — e.g. WASD into one Axis2D needs Negate on A/S and a Swizzle on W/S. Use Triggers (Pressed, Hold, Tap) to decide when an action fires. - Add the mapping context to the player via the
EnhancedInputLocalPlayerSubsystem(AddMappingContext(IMC, Priority)), usually inBeginPlay/possession. - Bind actions to handlers by
ETriggerEvent(Triggered,Started,Completed, …) on theEnhancedInputComponent, and read theFInputActionValuein the handler. - Verify in PIE; the Enhanced Input debugging console commands
(
showdebug enhancedinput) show which actions trigger and their values.
Patterns
1. Add the mapping context (C++ Character)
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
if (APlayerController* PC = Cast<APlayerController>(GetController()))
if (ULocalPlayer* LP = PC->GetLocalPlayer())
if (auto* Subsystem = LP->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
Subsystem->AddMappingContext(DefaultMappingContext, /*Priority*/ 0);
}
// DefaultMappingContext is a UPROPERTY(EditAnywhere) TObjectPtr<UInputMappingContext>.
2. Bind actions and read values
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* InputComponent)
{
Super::SetupPlayerInputComponent(InputComponent);
// The component is an Enhanced Input component when the plugin is active.
if (UEnhancedInputComponent* EIC = Cast<UEnhancedInputComponent>(InputComponent))
{
EIC->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyCharacter::Move);
EIC->BindAction(LookAction, ETriggerEvent::Triggered, this, &AMyCharacter::Look);
EIC->BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump);
EIC->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
}
}
void AMyCharacter::Move(const FInputActionValue& Value)
{
const FVector2D Axis = Value.Get<FVector2D>(); // Axis2D action
AddMovementInput(GetActorForwardVector(), Axis.Y);
AddMovementInput(GetActorRightVector(), Axis.X);
}
3. Blueprint equivalent (node flow)
Event BeginPlay
-> Get Controller -> Cast To PlayerController -> Get Local Player
-> Get EnhancedInputLocalPlayerSubsystem -> Add Mapping Context (IMC_Default, Priority 0)
// IA_Move is exposed as its own event node in the Character's Event Graph:
EnhancedInputAction IA_Move (Triggered)
-> Action Value (Vector2D) -> Add Movement Input (Forward * Y, Right * X)
Pitfalls
- No input at all — the mapping context was never added (
AddMappingContext), or the player has no Local Player yet. Add it after possession/BeginPlay. - Link/compile error binding in C++ —
"EnhancedInput"isn't inBuild.csPublicDependencyModuleNames. - WASD only moves on two keys / wrong axis — Axis2D needs Modifiers: Negate on the negative keys (A, S) and a Swizzle Input Axis Values on the vertical (W/S) so both axes map correctly. Raw bindings without modifiers misbehave.
Get<FVector2D>()returns zero — value-type mismatch: the Input Action is Digital/Axis1D, not Axis2D. Match theGet<T>()to the action's Value Type.- Action fires every frame unexpectedly —
Triggeredrepeats while held for a Down trigger; useStarted/Completedfor one-shots (jump press/release), or a Pressed/Tap trigger. - Two contexts fight — multiple mapping contexts stack by Priority; a higher-priority
context can consume a key. Manage with priorities and
RemoveMappingContext.
References
- For a complete first-/third-person C++ Character with Enhanced Input (header + source,
including look/jump and a control-rebind note), read
references/cpp-setup.md. - Primary docs: "Enhanced Input in Unreal Engine"
(
https://dev.epicgames.com/documentation/en-us/unreal-engine/enhanced-input-in-unreal-engine).
Related skills
input-systems— engine-agnostic input architecture and rebinding strategy.unreal-cpp-gameplay— the Character/Pawn class and module setup.fps-shooter— composes input with a 3D controller and shooting.
Related skills
More from gamedev-skills/awesome-gamedev-agent-skills and the wider catalog.

unreal-niagara
Create and control real-time particle effects in Unreal Engine 5 with Niagara systems, emitters, and modules.

unreal-packaging
Package and ship UE5 projects with editor menus or command-line BuildCookRun automation.

visual-novel
Build branching visual novels with script engine, character display, choices, and player conveniences like save/load and skip.

ai-behavior-trees-utility-ai
Build production behavior-tree and utility-AI runtimes for NPC decision-making.

gemini-watermark-remover
Remove visible Gemini watermarks from local images via CLI.

gpt-image-2
Full OpenAI-compatible GPT Image 2 coverage for text-to-image, edits, and streaming responses.