Quick answer: Audit bindings for duplicates. Tag each binding with its control scheme so only the active scheme fires. Disable inactive action maps. Subscribe each callback exactly once.
Here is how to fix Unity new Input System actions that fire multiple times per press. Causes are usually duplicate bindings, untagged scheme bindings, or multiple action maps sharing the same key.
The Symptom
Press Jump once. The performed callback runs twice. Or three times.
What Causes This
Duplicate bindings. Same key bound twice in the same action.
Scheme not tagged. Binding belongs to all schemes by default; both KB and gamepad fire if both have the binding.
Two action maps active. Player + UI action maps both with Jump bound to Space.
The Fix
Step 1: Audit bindings. Open the .inputactions asset. Expand each action; look for duplicate keys. Remove extras.
Step 2: Tag bindings with control schemes. Each binding row has a Control Schemes dropdown. Set Keyboard&Mouse for keyboard bindings, Gamepad for controller. Untagged bindings fire on every scheme.
Step 3: Switch action maps cleanly.
using UnityEngine.InputSystem;
private PlayerInput pi;
void OpenMenu()
{
pi.SwitchCurrentActionMap("UI");
}
void CloseMenu()
{
pi.SwitchCurrentActionMap("Player");
}
Only one action map active at a time avoids cross-firing.
Step 4: Subscribe callbacks once.
void OnEnable()
{
jumpAction.performed += OnJump;
}
void OnDisable()
{
jumpAction.performed -= OnJump;
}
Always pair OnEnable subscribe with OnDisable unsubscribe. Otherwise repeated enables stack subscribers.
Step 5: Use Input Debugger. Window → Analysis → Input Debugger. Watch the action; clicks show one event with the right scheme. If multiple events appear, your binding setup is wrong.
“Tag schemes. One active map. Subscribe once. Inputs fire once per press.”
Related Issues
For control scheme switching, see Scheme Switching. For .inputactions reload, see Actions Reload.
No duplicates. Schemes tagged. One map active. Subscribe once.