[Alert] Xbox Controllers Axis mapping changed on Win10 since few days

Hi
We have an issue with the Xbox controller axes since few days on Win 10 (only).
Indeed some axes mapping changed, especially :

  • Triggers no more mapped on the 3th axis but on the axis 3 (left) and 6 (right)
  • Dpad not anymore on 6 and 7 but on 7 and 8

We reproduced the bug on a lot of unity games using the Xbox controller, for instance :

Here are a few threads about this (kind of) issue :
https://www.reddit.com/r/Windows10/comments/4egyrg/windows_10_april_updates_kb3147458_and_kb3147461/d2080hw
http://www.neogaf.com/forum/showthread.php?t=1196485&page=4 (with a list of broken unity games)
…

On steam, the Steam Controller work fine on Win 10 with old mapping (even if emulating a XBO ctrl), so it’s quite difficult to find a fix/workaround for the Xbox controller without breaking the Steam Controller support…

Do you (Unity tech team) have any news about that ?

If this can help, find some details about the drivers here.
Win 8 Xbox Controller drivers =>

Win 10 Xbox Controller drivers =>

So just to be clear, Xbox Controller was working fine few days ago, but then you’ve updated the drivers on Windows 10 and the mappings have changed?

Yep,
All was fine few weeks ago, especially as we had a playtest session from the April 4th to the 15th on our game (with Win8 & Win10 PC). Playtesters tried the game with keyboard/mouse; Steam controller and xbox controller and all was ok.
As you know Win 10 updates are silent so I can’t tell you exactly when this “driver update” took place (sometimes you need to reboot your computer to apply the update) but it is quite recent.

If you want to try (especially the difference between win8 & win10) find here a small repro binary here.
Notice than using it on Win10 the binding is wrong :frowning:

Unless this is some brand new change yet again, this has been around for several months at least on Windows 10 and it applies only to the Xbox One Controller, not X360. It also only applies to Raw Input / Direct Input and not XInput.

Hey, I’ve contacted our Microsoft contact about this issue. Is there any chance you’re running a Windows Insider build?

This definitely affects normal Windows 10 installs. I accounted for it in Rewired in 1.0.0.66 which I released on 8/7/2015. Microsoft’s Windows 10 Xbox One HID driver changed the mappings and split the triggers into separate axes which caused other shifting. I don’t know why the OP is reporting this as a new change though. Perhaps he had Windows Update disabled?

Hi
Thanks Guavaman for this input… But it’s really weird because we had this “issue” very recently on our normal Windows 10 installs (with auto-update enabled). Maybe this Xbox One HID driver update was delayed here in France…
Anyway, we bought Rewired and created a wrapper for our input system so now we have a proactive inputs provider service for this kind of topics (Rewired :p).

1 Like

Unity, please fix this issue

I heard back from Microsoft and they said they’ll be fixing this in a windows 10 update soon.

They’re going to revert the driver change?

I believe that is the plan. The change was a bug on their part - it wasn’t intentional. They said it’s going to be part of the “Anniversary” update, which is due in July. It may even be fixed in current insider previews - though I’m not 100% about it.

Okay thanks for the update. I guess I will deal with it when it comes out. I hope they fix a couple of other major bugs I discovered with the Windows 10 driver (one that crashes the system after the device is disconnected when used with Raw Input.) Thanks!

I find it highly suspect that Microsoft broke this unintentionally, otherwise it would have been corrected quickly. And why is the issue not present in other engines? It seems much more likely that the Unity engine is handling the XBO controller in some way that it shouldn’t. In other words, I don’t think we’re getting the whole story here.

This only affects games (or engines) that use Raw Input for these controllers. If it uses XInput, it has absolutely no effect. Unity appears to use some kind of hybrid mix of Raw Input and XInput for XInput-compatible controllers which would be the reason it is affected by this change and also the reason for some other serious problems with their XInput controller handling. See this post of mine for a more complete explanation.

I also find it hard to believe it was an accident as it actually makes the controller more usable and is a very welcome change from the crippled Raw Input / Direct Input support XInput-compatible controllers have had this whole time. For the first time ever, the triggers work as one expects they should. And without having to use XInput for this, you can use more than 4 gamepads at once. Vibration still isn’t available without XInput, but otherwise, I find the new behavior much better than the old.

Any update to this?

I’ve had no issues since the W10 anniversary update.

1 Like

This year I thought: finally i can use XBOX controllers to have a baseline of universal compatibility for windows and bought me a set + dongle. Then i plugged my game to win10… NOPE

Also: That is really stupid, why would you link both triggers onto the same axis? Wait, i know: Racing games… which brought us those useless Analog triggers in the first place. Ok, at least the trigger-axes appear separated later on, i think on axis 9 and 10.

Is there any other game where a Trigger is even useful and to be appreciated against a good old button with real feedback? I even heard that pro-racing-game-players don’t even use the triggers for ac- and deceleration and rebind that inputs to face-buttons

I think i should stick with my rebind routine which will cost me a bit of accessibility instead of trying to cater all those different Assignments on whatever platform, so i can use any input source if the player is capable of setting it up.

MS addresses it here:
XInput and Direct Input

The independent triggers mapped to Unity axes 9 and 10 are obtained by XInput internally. However, because Unity does this by associating a HID device to an XInput device, it is prone to errors because there is no reliable way to associate a HID device to an XInput device id. (I don’t have a link but there are several threads about triggers on one joystick registering as triggers on another joystick. This only happens with multiple XInput devices attached.)

1 Like

Thanks for the info man, i cannot imagine the pain you have undergone to tinker up Rewired to it’s current state…

I just coded a crude Unity Wrapper to quickly rebind my mandatory 2-axes and 6-keys in-game without fiddling around in a table of buttons, i am quite happy with it.

But some situations are hard like when you bind the DS4-Triggers in Bluetooth mode you get an Axis that from -1F to 1F for the Trigger but those triggers have also a button linked to them.

As soon as the DS4 starts to send its gyro-values to Unity i quit, detecting an axis input while the gyro and accelerometer rape your input detection is yet another edgecase…