> For the complete documentation index, see [llms.txt](https://aldertlake.gitbook.io/docs-full-modern-menu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aldertlake.gitbook.io/docs-full-modern-menu/core-features/custom-input.md).

# Custom Input

Here, you are going to learn how to customize, change, and update your input for gamepad, keyboard, and mouse to fit your game's needs.

## GamePad Input Layout

In this tutorial, you are going to learn how to customize your own gamepad layout, apply it, and set its name depending on your game's needs.

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/khwghrzekYaVsXDYR14x/%7BD21D905E-299E-4438-A84F-27A9FA5019C2%7D.png" alt=""><figcaption><p>GamePadTemplate_WB</p></figcaption></figure>

### ✏️ Customize Layouts Names

You're going to need to change layout names to fit the style and needs of your game, but how do you do it?

**1  Reach the designer part of the widget blueprint** \
**2  Manually select the target layout text, and modify it.**

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/cUaa4Lsomay00dQC5kFQ/Untitled.jpg" alt=""><figcaption><p>Me trying to change the recon layout name to show you how easy it is !</p></figcaption></figure>

{% hint style="info" %}
This would require you to update Your Localization For The New Key (It May Appear in the review Tab).
{% endhint %}

### 🎮 Customize Input Actions Names&#x20;

The input action names in each layout are just placeholders for you to set and change them to fit your game's needs. (You've probably heard "to fit your game's needs" a lot, huh? 😉)

1. Inside **GamePadTemplate\_WB** reach the `LayoutsSwitch` Graph
2. Inside this graph, there are 5 custom events that set all input action names. Modify them to meet your needs.<br>

   <figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/9FenhOrEFEs2ZwMWcg5o/Untitled.jpg" alt=""><figcaption></figcaption></figure>
3. At the end of each layout, there's a section to set new input rules using the built-in input library system, allowing you to change input specifically for this layout on a gamepad.<br>

### 🕹️ Applying GamePad Layouts&#x20;

#### Applying GamePad Layouts using the Build-In System

You can now apply gamepad layouts by simply assigning an IMC to each layout and adding it to the 'Gamepad Layouts IMCs' section in the `Settings_Configuration` DataAsset.

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/8riT9ZsHjS23HamFa1rI/%7B5607E262-F848-401B-BE28-79C3D6907A1C%7D.png" alt=""><figcaption></figcaption></figure>

To use this system, which manually applies the corresponding gamepad IMC as a layout, you need to enable the **"Use Built-in Layout System"** option.\
The **priority** value determines the input priority of the gamepad IMC. It should be set based on the number of IMCs already injected.\
For example, if you've injected 4 IMCs, the gamepad layout IMC would be the fifth and should have a priority of **5**.

{% hint style="info" %}
The index of each IMC in the array determines its corresponding Layout Index.\
The layout system supports 5 layouts, with each layout using an index from 0 to 4 in order.
{% endhint %}

#### Manually Applying GamePad Layouts

The layout variable is stored in **Menu User Settings** under the name `ControllerTemplate` (of type `int`).\
To access its value—for use in the GameMode or Controller—simply **Get Menu User Settings** and retrieve the `ControllerTemplate` value from it.”

{% hint style="danger" %}
**Use Built-in Layout System** should be disabled inside **Settings\_Configuration** DataAsset.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/ygp207OWHeg8pUZJrXeI/%7BC79D458D-A545-4524-AC8D-14B2C1AEA530%7D.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Use this if you have another methode to apply layouts other than creating an IMC for each layout !
{% endhint %}

## Keyboard Key Mapping

Any IMC intended for key mapping must be added to the **"IMCs for Key Mapping"** section in the `Settings_Configuration` DataAsset.\
This ensures the IMC is registered at startup—without registration, key mapping will not function correctly or may fail to detect the IMC entirely.

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/2UCUluL0z2JG0dClCaz3/%7BED802349-6ADA-485F-BA4F-36E9E924B357%7D.png" alt=""><figcaption></figcaption></figure>

### 🖱️ Setup Actions For Mapping

Let's set up your Actions to work with `InputUserSettings`—a new and convenient system by Epic that makes key rebinding easy. Open your `Input Mapping Context` (IMC). You should see your input actions listed there, with each action assigned to a key!

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/dMejCdr6pHHwX1MhJ5gB/%7BCFA8CA2D-9E8C-4CF8-92F0-114FB3B05166%7D.png" alt=""><figcaption></figcaption></figure>

**Let me break it down for you in a simple way.**\
Inside the input action you want to include in the key mapping menu, expand one of the keys you want the user to modify (usually the keyboard one), then:

1. **Set "Setting Behavior"** to **Override Settings**.
2. **Assign "Player Mappable Key Settings"** to your **`PlayerMappableKeySettings`** class.
3. **Key Name**: This is the name the widget will ask for when adding the key—**make it unique and meaningful**.
4. **Display Name**: This is the user-friendly name that will appear in the menu for this key.
5. **Localization Flag**: Enable this if you want the Display Name to be translated (localized).

**For Category,** leave it set to **None**, and **disable the localization flag** (the small flag icon) for this field.

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/Y6AOWD7MRWr5YFyWkIds/Untitled.jpg" alt=""><figcaption></figcaption></figure>

### 🔤 Add New Input Elements&#x20;

The input key mapping widget is called **KeyMapping\_WB,** Adding your keys is very simple and easy after completing the User Input Settings steps above, now lets dive inside this widget and add our keys.

**You may notice that some keys already exist.**

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/SkjzuRa8gZ37c95cOBSt/%7B86896F54-555E-47AD-BBE0-225C6671C7F9%7D.png" alt=""><figcaption></figcaption></figure>

You have two options: either delete them all or modify the existing ones.\
In this guide, I’ll cover how to add a new key.\
If you plan to modify already added elements, simply **skip the step where I add the element to the widget.**

**This is called an Input Element just to help you understand more accurate it's**`Input_Element_WB`

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/AiGLzwxrLfi4Ojytyggr/%7B8CBA9D35-8F66-4CC2-B3DD-0E2E1B72AECE%7D.png" alt=""><figcaption></figcaption></figure>

**From the Palette on the left, search for `Input Element WB` and drag it into the Scroll Box.**\
You can add a **Spacer** with a **Y size of 20** between each input element, or simply duplicate an existing one!

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/18lwTghjO3MOk4rzkwE4/%7BD513374E-6BB8-4FBB-99DB-6E9D5BEA7F71%7D.png" alt=""><figcaption></figcaption></figure>

After adding the required number of input elements, open the Graph.\
Under the Event Construct node, add your new elements **in order** to the Input Element array.

{% hint style="info" %}
Note that in X Versions of the plugin. this process is automated & you only need to add an input element & set an mapping name for it !
{% endhint %}

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/DTXhnvtIY9RjAmucaUPU/Untitled.jpg" alt=""><figcaption></figcaption></figure>

Return to your designer tab and select each Input Element to fill it with its settings&#x20;

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/B47PopEplktuJM1Dhu4U/%7B1C1F786E-ED19-4028-9FAB-7C6852F23235%7D.png" alt=""><figcaption></figcaption></figure>

**Mapping Name** refers to the **Key Name** we set up earlier in **Step 3**.\
**Element Index** is the position (order) of the selected input element—make sure it matches the same order in both the widget and the Input Element array.

The **'Search for Duplicated Key Rules'** section might be a bit hard to understand at first, but it's very useful & explained below.

### 🎬 Exclusive Action Explained

**Imagine your game has separate inputs for the player and for when the player enters a vehicle.**\
For example, the player uses **W** to move forward, and the vehicle also uses **W** to accelerate. This would normally cause a conflict and break the key mapping menu, right?

**Well, not necessarily!** You can fix this by enabling **Exclusive Action**.\
This option checks whether the key the user entered is already used **only within the same target category**.

To set this up:

* Assign the **same category** (e.g., "Vehicle") to all vehicle-related actions.
* **Enable Exclusive Action** for each of them.
* Make sure you also fill in the **Target Category** field.

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/Xs57fKtLluRhS8hGXQe1/%7B9F96EE0B-5F1D-4B17-A27C-30842E5F64CD%7D.png" alt=""><figcaption></figcaption></figure>

This way, the system will prevent duplicate keys **within a category**, not across the entire input set—allowing you to use **W** for both "Move Forward" (player) and "Accelerate" (vehicle) without conflict.

{% hint style="danger" %}
Remember a field called Category in  [#setup-actions-for-mapping](#setup-actions-for-mapping "mention") , You should give each Key you want to use the Exclusive Action Feature the same category (the one you choose as Target Category).
{% endhint %}

This is the result after i set up my jump key as an example :thumbsup:

<figure><img src="https://content.gitbook.com/content/zBeSi5Zg7SXSwj6kLMdE/blobs/It5V3DHSoG1mXrKliLV9/%7B89235140-0D44-4F02-9A64-F51BDDCA44E7%7D.png" alt=""><figcaption></figcaption></figure>

***

> Now the input system is working, and the player can map each key! Head to [Save & Load System](/docs-full-modern-menu/core-features/images-and-media.md) to configure the save system and learn how it works.
