Quick answer: Steam Input exposes a virtual Xbox controller to your game, and your game is also reading the physical controller (DualSense, Switch Pro or a generic pad) directly. Choose one: opt that controller type out of Steam Input in Steamworks and keep native support, or rely on Steam Input and ignore the physical device while Steam is active.
Menus skip two items per press, characters jump twice, or a single player's controller shows up as player one and player two. It only happens when the game runs through Steam and usually only with PlayStation, Switch or generic controllers. Both Steam and your game are trying to support the same controller.
- Why it happens
- Decide which path supports each controller
- Fix 1: opt native controllers out of Steam Input
- Fix 2: ignore the physical device when Steam Input is active
- Local multiplayer: one controller as two players
- What to tell players
- Controller setups you cannot reproduce
- Related problems
- Frequently asked questions
Why it happens
When Steam Input is enabled for a controller type, Steam reads the physical controller and presents a virtual Xbox (XInput) controller to the game. Steam tries to hide the physical device from the game, but games and input libraries that read HID devices directly can still see it. The game then has two gamepads fed by the same hands. Players running DS4Windows, reWASD or similar tools produce the same effect outside Steam.
Decide which path supports each controller
- Native support: your engine reads the controller itself (Unity's Input System for DualSense, SDL-based engines for most pads). You get correct glyphs and device features like the light bar.
- Steam Input: Steam translates the controller, players can remap with Steam's configurator, and any controller Steam supports works. Your game only sees an Xbox controller unless you use the Steam Input API for glyphs and actions.
Either is fine. Doing both for the same controller type is what causes double input.
Fix 1: opt native controllers out of Steam Input
In Steamworks, open your app's Steam Input settings. You can declare which controller types your game supports natively, which tells Steam not to apply Steam Input to them by default. If your game handles PlayStation controllers itself, opt PlayStation controllers out and the virtual Xbox device disappears for them. Publish the change; players who manually forced Steam Input on for your game in their client settings still get it, which is worth a line in your FAQ.
Fix 2: ignore the physical device when Steam Input is active
If you prefer Steam Input, make sure only one device per player is read. Steam's virtual controllers use Valve's USB vendor ID, 0x28DE, which many input libraries expose. A simpler rule in Unity's Input System: when the game was launched by Steam and both a DualSense HID device and an XInput gamepad are present, disable the HID device.
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.DualShock;
using UnityEngine.InputSystem.XInput;
void DedupePads()
{
bool hasXInput = false;
foreach (var d in InputSystem.devices) if (d is XInputController) hasXInput = true;
if (!hasXInput) return;
foreach (var d in InputSystem.devices)
if (d is DualShockGamepad) InputSystem.DisableDevice(d);
}
Call it at startup and from InputSystem.onDeviceChange. Gate it on the game actually running under Steam so players without Steam keep their native controller, and adapt the idea for Switch Pro or generic devices.
Local multiplayer: one controller as two players
In couch co-op the duplicate device takes a player slot. The fixes above solve it; additionally, assign players by the first button press on each device rather than by device order, and show which device each player is on in the join screen so duplicates are obvious during testing.
What to tell players
- Close DS4Windows, reWASD or similar tools, or disable Steam Input for the game (right-click the game, Properties > Controller).
- Or keep Steam Input on and turn off the tool. One translation layer, not two.
Controller setups you cannot reproduce
Double input depends on the player's controller, Steam settings and background tools. Bugnet's SDKs for Unity, Godot and Unreal let players file an in-game report to which you can attach the connected device list as metadata, so the duplicate device is visible in the report instead of guessed at.
Related problems
- How to Fix Steam Input Showing Wrong Button Glyphs
- How to Fix Controller Glyphs Showing the Wrong Buttons
- Fix: PS5 DualSense Controller Not Working in a Unity Game on PC
- How to Fix Unity PlayerInput Events Firing Twice with the New Input System
Frequently asked questions
Why does my controller input register twice in Steam games?
Steam Input presents a virtual Xbox controller while the game also reads the physical controller directly, so each press arrives from two devices.
How do I stop Steam Input from duplicating PlayStation controller input?
Opt PlayStation controllers out of Steam Input in your Steamworks Steam Input settings if your game supports them natively, or ignore the physical device while Steam’s virtual controller is present.
Can DS4Windows cause double input?
Yes. It creates a virtual Xbox controller alongside the real one. Use either it or Steam Input, and make sure the game reads only one device.
One controller, one translation layer. Steam Input or native support, never both.