Quick answer: Each Input Action needs a separate gamepad binding inside the Input Mapping Context. The action does not auto-detect controller equivalents. Open the IMC, click the green + next to your existing keyboard binding, and add a Gamepad_* key. Apply Dead Zone modifiers for sticks.

Here is how to fix Unreal Enhanced Input Actions that work perfectly on keyboard but produce nothing when you press the equivalent gamepad button. Your IA_Jump action triggers on Spacebar but not on the controller’s A button. The action itself does not know about input devices — that knowledge lives in the Input Mapping Context, and you have to add gamepad bindings explicitly.

The Symptom

You set up Enhanced Input with an IA_Move (Vector2) and IA_Jump (Bool). Keyboard W/A/S/D and Space all work. Plug in an Xbox controller, press A, nothing happens. Push the left stick, no movement. The character is alive and responsive on keyboard, just deaf to the gamepad.

What Causes This

No gamepad bindings in the IMC. Each binding inside an Input Mapping Context maps a single key to an Input Action. If the IMC only has Spacebar mapped to IA_Jump, the gamepad A button is unmapped.

Mapping context not added at runtime. The IMC must be added to the local player’s Enhanced Input subsystem. If you never call AddMappingContext, no inputs work. If you only add it conditionally (for example, only if a flag is set), gamepad-only paths can miss it.

Stick deadzone too aggressive. A Dead Zone modifier with Lower Threshold of 0.25 means small stick movements register as zero. Some gamepads have stick drift that prevents them from reaching higher thresholds.

Trigger type mismatch. If the IA uses a Hold trigger with a long duration, a gamepad button tap is too short. The Started event still fires, but Triggered may not.

The Fix

Step 1: Open the Input Mapping Context and add gamepad bindings.

For each action, expand the action row, then click the + to add a key binding. Search for and select Gamepad_FaceButton_Bottom (the A button on Xbox, X on PlayStation). For movement, the Left Thumbstick 2D Axis is bound via Gamepad_LeftX + Gamepad_LeftY with the appropriate Swizzle/Negate modifiers, or simply choose Gamepad_Left2DAxis if your engine version exposes it.

Step 2: Confirm the IMC is added at runtime.

void AMyCharacter::PossessedBy(AController* NewController)
{
    Super::PossessedBy(NewController);

    if (APlayerController* PC = Cast<APlayerController>(NewController))
    {
        if (UEnhancedInputLocalPlayerSubsystem* Subsys =
            ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(
                PC->GetLocalPlayer()))
        {
            Subsys->AddMappingContext(DefaultMappingContext, 0);
        }
    }
}

Step 3: Tune the Dead Zone modifier on the Move action.

In the IMC mapping for IA_Move:
Modifiers:
  - Dead Zone
      Type:           Axial
      Lower Threshold: 0.10
      Upper Threshold: 1.00
  - Smooth Delta            // Optional, for stick smoothing

0.10 is a sensible default. Some pads with drift need 0.15. Going much higher feels unresponsive.

Step 4: Match trigger types to expected gamepad use. For a jump action that should fire on tap, use Pressed (default) rather than Hold. For a charged action, Hold works on both keyboard and gamepad as long as the duration is reasonable (0.3–0.5 seconds).

Step 5: Verify in Play with the input visualizer. Run showdebug enhancedinput in the console. The on-screen overlay shows which IMCs are active and what input each action is receiving in real time.

Per-Device Mapping Contexts

For more complex projects, split mappings into IMC_Default_KBM and IMC_Default_Gamepad. Detect device with GetMostRecentlyUsedKeyDevice and swap contexts to keep behavior tuned per device. This is also how you implement device-specific UI prompts.

// Pseudo-code for swapping context on device change
if (LastInputWasGamepad && !GamepadContextActive)
{
    Subsys->RemoveMappingContext(KBMContext);
    Subsys->AddMappingContext(GamepadContext, 0);
    GamepadContextActive = true;
}

“Enhanced Input does not assume gamepad equivalents. Every action needs an explicit gamepad binding, or the device is silent.”

Related Issues

For Niagara emission, see Niagara Not Rendering in PIE. For Blueprint inheritance, see Blueprint Child Default Not Inheriting.

Open the IMC. Add the Gamepad_ key. Lower the deadzone. Game responds.