> For the complete documentation index, see [llms.txt](https://docs.twgamesdev.com/uhfps/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.twgamesdev.com/uhfps/guides/managing-inputs.md).

# Managing Inputs

{% hint style="info" %}
The asset utilizes the **Unity Input System** package, which means modifying inputs may differ from the old built-in Unity Input System. If you're unfamiliar with setting up the Input System package, please refer to the guide provided below.
{% endhint %}

{% content-ref url="/pages/T2uFQTSg0Rn364HXKKB3" %}
[Setting up Input System](/uhfps/guides/managing-inputs/setting-up-input-system.md)
{% endcontent-ref %}

1. Locate the **PlayerControls** asset within the **UHFPS -> Scriptables -> Input** folder. To open the **Input Actions** window, double-click on the asset.

<figure><img src="/files/yyJ2SctEO2O3oJ4pdXol" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/iLh3RHdLcSTL6SfdiIlI" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
After opening the **Input Actions** window, you may notice that the action names follow the **input.action.something** pattern. This was in fact used as localization keys in previous versions of UHFPS. In the latest version of the asset this has been replaced with a better solution, so now it's up to you to name the inputs to your liking.
{% endhint %}

2. To create a new input action, simply click on the **(+)** icon found to the right of the **Actions** tab name. Enter the name of the action in the localization key pattern.

{% hint style="info" %}
Input names containing an **asterisk (\*)** will be automatically excluded from menu display and serialization. For instance, **input.action.look\*** will be disregarded.
{% endhint %}

3. Select the newly created action and modify the **Action Type** to the desired input type.

<figure><img src="/files/If5GtuXXaOngOghWvxKd" alt=""><figcaption></figcaption></figure>

4. Next, click on the **\<No Binding>** and choose the key you want your action to utilize.

<figure><img src="/files/4CfiHxBCPUaFc8pCZrdC" alt=""><figcaption></figcaption></figure>

5. If you are using a custom controls asset, ensure that you assign the reference to this asset within the **Input Manager** component.

<figure><img src="/files/2NFZsI6wAJ1Z5KvRM7UR" alt=""><figcaption></figcaption></figure>

6. In order to access input actions within a script, simply use the **Input Manager** functions. There are multiple ways to utilize the input.

{% tabs %}
{% tab title="In Update" %}

```csharp
using UnityEngine;
using UHFPS.Input;

private void Update()
{
    if (InputManager.ReadButtonToggle(this, Controls.CROUCH))
    {
        // do something when toggled on
        // even if you don't hold any button
    }

    if (InputManager.ReadButtonOnce(this, Controls.FIRE))
    {
        // do something once as button
    }

    if (InputManager.ReadButton(Controls.FIRE))
    {
        // do something every update as button
    }

    if(InputManager.ReadInput(Controls.LEAN, out float direction))
    {
        // do something every update with value
    }
}
```

{% endtab %}

{% tab title="Performed" %}

```csharp
using UnityEngine;
using UnityEngine.InputSystem;
using UHFPS.Input;

void Start()
{
    InputManager.Performed(Controls.FIRE, OnFire);
}

private void OnFire(InputAction.CallbackContext obj)
{
    // do something 
}
```

{% endtab %}

{% tab title="Observable" %}

```csharp
using System;
using UnityEngine;
using UnityEngine.InputSystem;
using UHFPS.Input;

IDisposable disposable;

void Start()
{
    disposable = InputManager.PerformedObservable(Controls.FIRE)
        .Subscribe(OnFire);
}

private void OnDestroy()
{
    // you have to dispose input event manually
    disposable.Dispose();
}

private void OnFire(InputAction.CallbackContext obj)
{
    // do something
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
You can find a script called **Controls**, which stores all the input names so that you don't have to keep typing out the whole input name over and over again.
{% endhint %}

<figure><img src="/files/7fHB31hePAQXKYMfsWKN" alt=""><figcaption></figcaption></figure>
