Quick answer: Track the active input device, hide the mouse cursor and lock to gamepad focus when the stick moves, and re-show the cursor only on real mouse movement.
In menus the highlight flickers between where the mouse points and where the stick last moved, because both control selection simultaneously. Here is how to fix it.
How to fix it
1. Track the last-used device
Record whether the most recent input came from mouse or gamepad and treat that as the active mode for the menu.
2. Suppress the other device
In gamepad mode, hide the hardware cursor and ignore mouse-hover selection; in mouse mode, clear the forced selection so hover drives it.
3. Switch only on real input
Switch modes only on meaningful input (actual mouse delta or a stick push past the deadzone) so tiny jitter does not toggle modes every frame.
Catching the ones you can't reproduce
The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.
Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.
This is where a tool like Bugnet earns its place. Its SDK captures every Unity error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.
Ship the fix, watch the signature disappear from the next build. That's how you know it's really gone.