Quick answer: Test with the OS Game Controller panel first (joy.cpl). If detected there but not in your game, the engine isn’t using XInput. If not detected anywhere, reinstall the driver via Device Manager.
A player downloads your game, plugs in an Xbox Controller, and the game says “No controller detected.” The controller works in Windows 11’s built-in Xbox menu and in other Steam games. Something about your game’s input handling is missing the controller.
Layer 1: Windows Sees the Controller
Have the player run:
Win+R → type "joy.cpl" → Enter
The Game Controllers panel lists detected controllers. If the Xbox Controller doesn’t appear here, the OS-level driver is broken. Have them:
- Open Device Manager.
- Find Xbox Controller under Human Interface Devices or Xbox Peripherals.
- Right-click → Uninstall device, then Action → Scan for hardware changes.
- If wireless, unpair and re-pair via Settings → Bluetooth.
Layer 2: XInput Sees the Controller
Write a 20-line probe to call XInputGetState:
// xinput_probe.cpp
#include <Xinput.h>
#include <stdio.h>
#pragma comment(lib, "Xinput.lib")
int main() {
for (int i = 0; i < 4; ++i) {
XINPUT_STATE state{};
DWORD r = XInputGetState(i, &state);
printf("Slot %d: %s\n", i,
r == ERROR_SUCCESS ? "connected" : "empty");
}
}
If all four slots are empty even with a controller plugged in, XInput isn’t recognizing it. Could be a non-XInput device (third-party controllers using DirectInput only). If at least one shows connected, your engine’s XInput wiring is the suspect.
Layer 3: Engine Wiring
Engines differ:
- Unity (legacy Input Manager): polls XInput automatically; rarely fails. Input System package requires Gamepad device enable in Settings.
- Unreal: XInput is built-in via the Default Input plugin; no setup needed.
- Godot: uses SDL2 GameController DB; should “just work” for Xbox Controllers via XInput backend.
- Custom engines: ensure you call
XInputGetStateeach frame on each slot. Don’t cache “disconnected” results — hot-plug requires re-polling.
Game Bar Conflict
Windows 11’s Game Bar sometimes claims controller exclusivity in certain modes. Have the player disable it: Settings → Gaming → Xbox Game Bar → Off. Restart the game. If detection returns, the conflict was real.
Third-Party Wireless Adapters
For Xbox Wireless Adapter for Windows, the driver should auto-install. If not:
- Run Windows Update to fetch the latest driver.
- Or download from Microsoft’s “Xbox Accessories” UWP app.
- Wired USB connection is the most reliable fallback.
Reporting Path
Include in your support docs:
- Run
joy.cpl— does the controller appear? - If yes: report your game version. If no: describe Device Manager state.
- Wired or wireless? If wireless: pair info.
Most reports resolve at step 1 with a driver reinstall.
Verifying
After fix, plug in the controller, launch your game, press A. The character should jump (or whatever your bind is). joy.cpl should show input on the corresponding test stick.
“Three layers: OS, XInput API, engine. Test bottom up to find which one is dropping the controller.”
Ship a small “controller probe” debug screen in your game — helps support diagnose detection issues without screen-sharing.