Skip to main content
Version: 2.x

Setup

Input mapping works with your game's existing Enhanced Input actions. The system uses the core setting framework with specialized components for input.

Prerequisite: Your project uses Enhanced Input for gameplay inputs.

Enhanced Input configuration

Configure player-mappable bindings

In your existing Input Mapping Context, configure each key binding you want players to be able to rebind.

The exact Enhanced Input UI varies a little by engine version, but in current Unreal versions each remappable binding usually needs these settings:

  1. Open a key binding you want players to be able to rebind.
  2. Set Setting Behavior to Override Settings.
  3. Set Player Mappable Key Settings to Player Mappable Key Settings.
  4. Set Name to a unique identifier such as Jump_KB, MoveForward_KB, or MoveBackward_KB.
  5. Optionally set Display Name and Display Category if your project uses them.
  6. Repeat for each additional binding you want to expose in the settings menu.
IMC_DefaultControls
├── IA_Jump
│ └── Space
│ ├── Setting Behavior: Override Settings
│ ├── Player Mappable Key Settings: Player Mappable Key Settings
│ └── Name: "Jump_KB"
├── IA_Move
│ ├── W
│ │ ├── Modifiers: Swizzle Input Axis Values (YXZ)
│ │ ├── Setting Behavior: Override Settings
│ │ ├── Player Mappable Key Settings: Player Mappable Key Settings
│ │ └── Name: "MoveForward_KB"
│ ├── S
│ │ ├── Modifiers: Swizzle Input Axis Values (YXZ), Negate
│ │ ├── Setting Behavior: Override Settings
│ │ ├── Player Mappable Key Settings: Player Mappable Key Settings
│ │ └── Name: "MoveBackward_KB"
│ ├── A
│ │ ├── Modifiers: Negate
│ │ ├── Setting Behavior: Override Settings
│ │ ├── Player Mappable Key Settings: Player Mappable Key Settings
│ │ └── Name: "MoveLeft_KB"
│ └── D
│ ├── Setting Behavior: Override Settings
│ ├── Player Mappable Key Settings: Player Mappable Key Settings
│ └── Name: "MoveRight_KB"
Widget Mapping Name must match

The InputMappingSettingWidget still identifies bindings by its Mapping Name property. Set that widget property to the same unique binding name you configured in Enhanced Input.

Separate Keyboard and Gamepad Bindings

To allow different bindings for keyboard and gamepad on the same action, use different mapping names (e.g., "Jump_KB" for Space, "Jump_GP" for Gamepad Face Button Bottom).

Create Input Setting Type

Create a single Setting Type that will be shared by all input mapping widgets in your game:

  1. Right-click in the Content Browser and select Blueprint Class.
  2. Choose Setting Type as the parent class.
  3. Name it Setting_InputMapping.
  4. Configure:
    • Domain: Player.
    • Binding Strategy: InputSettingBindingStrategy.
    • Persistence Strategy: ConfigSettingPersistenceStrategy (or a custom strategy).
    • Key Fragment (optional): "Input".
Example Project

If you've copied widgets from the example project, you may already have this Setting Type and can skip this step.

Add Input Mapping Widget

In your settings menu widget:

  1. Add InputMappingSettingWidget to your UI.
  2. Set Setting Type to your Setting_InputMapping.
  3. For each remappable binding you want to display:
    • Set Mapping Name to the exact player-mappable Name configured in Enhanced Input (for example Jump_KB).
    • Set Key Slot to "First" for primary binding or "Second" for secondary binding.

Example: Create two widgets for Jump_KB - one with Key Slot "First" for primary, another with Key Slot "Second" for alternate. Use a different mapping name such as Jump_GP for gamepad.

Key filtering (optional)

Restrict which keys can be bound by setting the widget's Key Filter property:

  • Input Key Filter - Gamepad - Only allow gamepad buttons.
  • Input Key Filter - Non Gamepad - Only allow keyboard/mouse.
  • Custom filters require C++ implementation.

See the example project for a complete implementation. For visual display of keys with platform-specific icons, see Key Visualization.