> For the complete documentation index, see [llms.txt](https://niam.gitbook.io/input-mapper-for-unity/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://niam.gitbook.io/input-mapper-for-unity/getting-started/setup.md).

# Setup

Welcome to the Input Mapper package! This guide will help you get started with the package, covering the initial setup, basic usage and best practices.

## Prerequisites

Before you begin, ensure you have the following:

* Unity 6 LTS or higher.
* Input System 1.16 or higher.

{% hint style="warning" %}
Before installing the package, verify that the **Active Input Handling** is set `Input System Package (New)` or `Both` in `Project Settings → Player`.
{% endhint %}

## Installation

To install the Input Mapper package, follow the instructions below.

{% stepper %}
{% step %}

### <i class="fa-book-open">:book-open:</i> Open Unity Package Manager

Navigate to **Window** **→** **Package Manager** in the top menu.
{% endstep %}

{% step %}

### <i class="fa-searchengin">:searchengin:</i> Search for the Package

In the **My Assets** tab, use search bar and find **Input Mapper for Unity**.
{% endstep %}

{% step %}

### <i class="fa-download">:download:</i> Download and Import the Package

Once found, Select the package and click **Download** then **Import.**
{% endstep %}

{% step %}

### <i class="fa-check">:check:</i> Verify Installation

After importing, the `InputMapper` folder should appear in `Assets/Plugins`.
{% endstep %}
{% endstepper %}

{% hint style="success" %}
After installation, a popup window will appear prompting you to import the TextMeshPro Essential Resources.
{% endhint %}

## Create Your First Prompt

In the Hierarchy window, right-click and navigate to **UI → Input Mapper**, then select the appropriate boilerplate template for your use case.

* [**Input Prompt – Text**](/input-mapper-for-unity/components/input-prompt-text.md)\
  Display bindings as readable text, such as "Press E to Interact".
* [**Input Prompt – Sprite**](/input-mapper-for-unity/components/input-prompt-sprite.md)\
  Display bindings as icons/sprites (great for controller-heavy UI).
* [**Input Prompt – Binding**](/input-mapper-for-unity/components/input-rebind-binding.md)\
  Updates the binding path of a specific input binding of action at runtime.
* [**Input Prompt – Processor**](/input-mapper-for-unity/components/input-rebind-processor.md)\
  Expose sensitivity/invert/deadzone style processor tuning.

<div align="left"><figure><img src="https://772198664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZKiWXgJ9UhGsBWWXhjMU%2Fuploads%2FTeW288naTFygaQatDpbK%2Fezgif-5834d7fb6186d6ca.gif?alt=media&amp;token=6cd4a4ca-2219-46cf-a106-d07016393989" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="success" %}
Navigate to **3D Object → Input Mapper** for non-canvas input prompt templates.
{% endhint %}

## Pro Tips & Best Practices

### Setting up Binding Order

Keep in mind that Input Mapper displays bindings in the exact order they are arranged in your `Input Action Asset`. If you want a primary key to show up first, make sure it's at the top of the list!

<div align="left"><figure><img src="https://772198664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZKiWXgJ9UhGsBWWXhjMU%2Fuploads%2F7EdUzT7UCLSJ8NIujKLh%2Fimage.png?alt=media&amp;token=78b4693d-8ed3-48ea-b759-b49113df7a03" alt="" width="563"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://772198664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZKiWXgJ9UhGsBWWXhjMU%2Fuploads%2FNU8k9GUGWc1YjFwqCtwd%2Fimage.png?alt=media&amp;token=e5f15354-7d33-4724-bc5e-d19b63bee62d" alt="" width="563"><figcaption></figcaption></figure></div>

### Working with Composites

When dealing with composites (like 2D Vector with WASD and Arrow Keys), Input Prompts will ignore subsequent parts of a composite binding if they share the exact same name (e.g. Up, ~~Up~~, Down, ~~Down~~, Left, ~~Left~~, Right, ~~Right~~).

<div align="left"><figure><img src="https://772198664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZKiWXgJ9UhGsBWWXhjMU%2Fuploads%2FTJINkbezrkrYLhrCfT0s%2Fimage.png?alt=media&amp;token=16b463da-5b5d-4b6e-86f5-8d2482034255" alt="" width="563"><figcaption><p><i class="fa-xmark" style="color:$danger;">:xmark:</i> Arrow Keys is omitted.</p></figcaption></figure></div>

While moving the duplicate-name binding to the end of the list works as a hacky workaround, they are still treated as a single control, so the control separator is not applied.

<div align="left"><figure><img src="https://772198664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZKiWXgJ9UhGsBWWXhjMU%2Fuploads%2FX3CjkmhaB7FCL3UhZ4iO%2Fimage.png?alt=media&amp;token=8e635dd4-aa1a-46dc-bb82-197ad5644dbe" alt="" width="563"><figcaption><p><i class="fa-xmark" style="color:$danger;">:xmark:</i> Shows both WASD and Arrow Keys, but no delimiter.</p></figcaption></figure></div>

Instead, create a brand new composite binding and move the alternative controls (like the Arrow Keys) into that separate composite. This keeps things organized and lets Input Mapper format them beautifully!

<div align="left"><figure><img src="https://772198664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZKiWXgJ9UhGsBWWXhjMU%2Fuploads%2FsLLAb7O9Itt8zvQ8Mpv4%2Fimage.png?alt=media&amp;token=d0327b60-0f6e-4fda-bb32-43b6daebb16c" alt="" width="563"><figcaption><p><i class="fa-check" style="color:$success;">:check:</i>  Shows both WASD and Arrow Keys with delimiter.</p></figcaption></figure></div>
