Configure the Unity Input System once, then read actions like ordinary game data.
A compact input layer with typed values, frame-state helpers, device tracking and generated action names for Unity projects that do not need another gameplay framework.
Why Plug Input Pack? · Installation · Quick Start · Documentation
The Unity Input System is flexible, but the same adapter code tends to reappear around it: looking up actions, exposing values, distinguishing a held input from a fresh press, tracking the active device and keeping physics reads consistent.
Plug Input Pack keeps that layer small and reusable. The action asset remains the source of truth; the package turns it into a reader that gameplay code can query without repeating the setup in every controller.
| Generated action names Save the action asset and use generated constants instead of scattering string keys through gameplay code. |
Typed reads Read vectors, buttons and other action values through one compact access pattern. |
| Frame-state helpers Separate held, pressed and released states across both Update and FixedUpdate. |
Device awareness Track the active control scheme and centralize cursor or debug behavior when the project needs it. |
Requires Unity 2022.3 or newer. The compatible Input System dependency is declared by the package.
In the Package Manager, choose Add package from git URL and paste:
https://github.com/Natteens/com.natteens.pluginputpack.git
Or add it to Packages/manifest.json:
{
"dependencies": {
"com.natteens.pluginputpack": "https://github.com/Natteens/com.natteens.pluginputpack.git"
}
}Pin the dependency to a release tag when reproducible installs matter.
Create an Input Action Asset, assign it to a PlugInputReader, then place a
PlugInputComponent in the scene. Saving the action asset generates InputNames.cs.
using PlugInputPack;
using UnityEngine;
public sealed class PlayerInputExample : MonoBehaviour
{
[SerializeField] private PlugInputComponent input;
private void Update()
{
Vector2 movement = input[InputNames.Move];
if (input[InputNames.Jump].JustPressed)
{
Debug.Log("Jump");
}
}
}The component owns input lifecycle. Gameplay code only reads the state it needs.
The complete workflow lives in Documentation, including:
- action asset and reader setup;
- Update versus FixedUpdate behavior;
- callbacks and active-device tracking;
- cursor handling, generated names and troubleshooting.
See the changelog for release history.
MIT. See LICENSE.