Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Wire player input in Unity 6 with the Input System package: Input Actions, action maps, the PlayerInput component, and reading values via callbacks or polling. Use when the project has a .inputactions asset or com.unity.inputsystem, or when the user mentions the Unity Input System, InputAction, action maps, PlayerInput, control schemes, or rebinding.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 228% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 178% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 179% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 219% | 0% |
Read input through Unity's Input System package (com.unity.inputsystem, 1.x) — action-based, device-agnostic, rebindable. Targets Unity 6. This is the modern replacement for the legacy Input.GetAxis/Input.GetKey Input Manager.
.inputactions asset withaction maps and control schemes, wiring a PlayerInput component, reading a Vector2 stick/WASD value, or handling gamepad + keyboard + touch from one set of actions.
Packages/manifest.json contains com.unity.inputsystem or the project has an*.inputactions asset.
When not to use: rebindable-control architecture across engines → input-systems (this skill is the Unity-specific API). Moving the character once you have the input vector → unity-physics / unity-csharp-scripting.
input when this is Input System Package (New) or Both. Both is required if any old Input.GetAxis code remains.
.inputactions asset. Add an action map (e.g. Gameplay), add actions(Move = Value/Vector2, Jump = Button, Fire = Button), and bind them to controls and composite bindings (WASD = 2D Vector composite).
PlayerInput component (designer-friendly) — drop it on the player, point it at theasset, pick a Behavior (Send Messages / Broadcast / Invoke Unity Events / Invoke C# Events). Best for single/local-coop players.
InputActionReference / InputActionAsset) — most control; youEnable() actions and read them. Best for systems and tools.
PlayerInput enables its default map automatically;actions you reference yourself must be .Enable()d (and disabled on teardown).
and that actions fire.
PlayerInput with "Send Messages" (handlers on the same GameObject)csharpusing UnityEngine; using UnityEngine.InputSystem; // PlayerInput (Behavior = Send Messages) calls On<ActionName>(InputValue) by name. public class PlayerInputReceiver : MonoBehaviour { private Vector2 _move; private void OnMove(InputValue value) => _move = value.Get<Vector2>(); // Move action private void OnJump(InputValue value) { if (value.isPressed) Jump(); } // Button action private void Update() { /* drive movement from _move */ } private void Jump() { } }
csharpusing UnityEngine; using UnityEngine.InputSystem; public class DirectMover : MonoBehaviour { [SerializeField] private InputActionReference moveAction; // assign the Move action private void OnEnable() => moveAction.action.Enable(); // REQUIRED or it reads zero private void OnDisable() => moveAction.action.Disable(); private void Update() { Vector2 move = moveAction.action.ReadValue<Vector2>(); // continuous value transform.Translate(new Vector3(move.x, 0, move.y) * (5f * Time.deltaTime)); } }
csharp[SerializeField] private InputActionAsset actions; private void OnEnable() { actions.FindAction("Gameplay/Fire").performed += OnFire; // edge event: fires once actions.FindActionMap("Gameplay").Enable(); } private void OnDisable() => actions.FindAction("Gameplay/Fire").performed -= OnFire; private void OnFire(InputAction.CallbackContext ctx) => Shoot(); // ctx.ReadValue<T>() if needed private void OpenPauseMenu() // change context, don't sprinkle if-checks { actions.FindActionMap("Gameplay").Disable(); actions.FindActionMap("UI").Enable(); } private void Shoot() { }
Input Manager (Old), or youforgot to Enable() the action/map. PlayerInput auto-enables; raw InputActions do not.
InvalidOperationException about the old input backend → some script still callsInput.GetAxis/Input.GetKey while Active Input Handling is New. Port it or set Both.
ReadValue → button presses are edge events; use theperformed callback (or WasPressedThisFrame()), not per-frame ReadValue for triggers.
Send Messages handlers never fire → the receiving script must be on the sameGameObject as the PlayerInput; Broadcast Messages reaches children too.
-=) in OnDisable; re-subscribing in OnEnablewithout unsubscribing doubles up handlers.
in the Input Debugger; the Vector2 composite needs all four bindings set.
PerformInteractiveRebinding), saving/loadingbindings as JSON, and local multiplayer with PlayerInputManager, read references/rebinding.md.
(https://docs.unity3d.com/Manual/com.unity.inputsystem.html).
input-systems — engine-agnostic input architecture (rebinding, buffering, multi-device).unity-csharp-scripting — the MonoBehaviour these handlers live in.unity-physics — applying the input vector to a Rigidbody.Other measured skills in the registry, with their headline benchmark lift.