gamedev-skills/awesome-gamedev-agent-skills

unreal-enhanced-input

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.

Ver código fuente

Cómo usar

  1. Copia el comando y revisa el paquete antes de instalarlo en tu entorno de agente.
  2. Consulta las herramientas, credenciales y entornos necesarios en el documento original.
  3. Describe las entradas y el resultado deseado; contrasta la salida con las fuentes.
npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill unreal-enhanced-input

Antes de empezar

  • La instalación no incluye suscripción al modelo, cuota API ni permisos sobre tus archivos.
  • Las estrellas e instalaciones reflejan actividad, no una prueba independiente de calidad o seguridad.
Documento original del Skill

Contenido del repositorio de origen con títulos, ejemplos, código, tablas, enlaces e imágenes preservados.

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 references EnhancedInput.

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

  1. Enable the module/plugin. Enhanced Input is on by default in UE5; for C++ binding add

"EnhancedInput" to PublicDependencyModuleNames in *.Build.cs.

  1. Create Input Actions (`IA_`). Each has a Value Type: Digital (bool) for buttons,

Axis1D (float) for triggers, Axis2D (Vector2D) for movement/look.

  1. 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.

  1. Add the mapping context to the player via the EnhancedInputLocalPlayerSubsystem

(AddMappingContext(IMC, Priority)), usually in BeginPlay/possession.

  1. Bind actions to handlers by ETriggerEvent (Triggered, Started, Completed, …) on

the EnhancedInputComponent, and read the FInputActionValue in the handler.

  1. 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)

cpp
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

cpp
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)

text
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 in Build.cs

PublicDependencyModuleNames.

  • 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 the Get<T>() to the action's Value Type.

  • Action fires every frame unexpectedly — Triggered repeats while held for a Down trigger;

use Started/Completed for 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.

Relacionados por tarea

del mismo repositorio

Más Skills

Todos los Skills
gamedev-skills
Comunidad

game-feel

Add "juice" and game feel that makes actions satisfying — screen shake, hit-stop/freeze frames, tweened/eased motion, squash & stretch, knockback, and layered audio-visual feedback — as engine-neutral techniques that pair with the detected engine's tween, particle, and camera APIs. Use when the user mentions game feel, juice, "make it feel good/punchy", screen shake, hit stop, screen freeze, easing, squash and stretch, impact frames, or feedback/polish on hits, jumps, pickups, and deaths.

instalaciones
16
GitHub Stars
4,3 mil
Actualizado
24 oct
gamedev-skills
Comunidad

audio-design

Implement game audio practice — bus/mixer architecture and gain in decibels, ducking (sidechain), adaptive/dynamic music via layering and re-sequencing, SFX variation, and beat synchronization. Engine-neutral. Use when the user mentions audio mixing, audio buses, adaptive/dynamic music, ducking, SFX variation, music layers, or syncing gameplay to the beat.

instalaciones
13
GitHub Stars
4,3 mil
Actualizado
24 oct
gamedev-skills
Comunidad

performance-optimization

Find and fix game performance problems methodically — measure with the engine profiler first, reason about the frame-time budget, locate the CPU-vs-GPU bottleneck, then apply the right fix: object pooling, draw-call batching, fewer allocations/GC spikes, and asset budgets. Engine- neutral method that pairs with each engine's profiler. Use when the user mentions performance, optimize, low/dropping FPS, frame drops, stutter, lag, profiler, frame budget, draw calls, batching, garbage collection/GC

instalaciones
13
GitHub Stars
4,3 mil
Actualizado
24 oct
gamedev-skills
Comunidad

shader-programming

Write game shaders from cross-engine fundamentals — the vertex→fragment pipeline, coordinate spaces, UV math, and common 2D/3D effects (tint, UV scroll, dissolve, outline, fresnel rim, vignette) in GLSL with HLSL equivalents. Use when the user mentions shaders, fragment/pixel shader, vertex shader, UV, GLSL, HLSL, or effects like dissolve, outline, or rim light.

instalaciones
13
GitHub Stars
4,3 mil
Actualizado
24 oct