Input Adapter doesn't switch from Keyboard to Gamepad if Left or Right sticks are used
Closed this issue · 5 comments
In the UpdateInputDevice ()
function the follwing check is done:
if(InputManager.AnyInput(_joystickConfiguration))
When trying to switch from KeyboardAndMouse to Gamepad, this check fails to detect the left or right stick axes on the xbox 360 controller. This creates a jarring user experience when users try to navigate a menu, for example. It however detects triggers and the dpad just fine.
Here's a hacky fix:
if(InputManager.AnyInput(_joystickConfiguration))
{
SetInputDevice(InputDevice.Joystick);
}
else
{
var xAx = Input.GetAxisRaw ("joy_0_axis_0");
var yAx = Input.GetAxisRaw ("joy_0_axis_1");
if ( Mathf.Abs(xAx) > 0.5f || Mathf.Abs(yAx) > 0.5f)
{
SetInputDevice(InputDevice.Joystick);
}
}
I tried it in the InputAdapter example scene and it worked but I did notice that it takes around 0.5-1 sec to detect the switch. I'll look into it. Can you test it in the same example scene and let me know if it works there?
Okay, let me test it out in a clean project and send it to you
So I managed to figure out that the bug is related to the Input Configuration I edited. If I use the default config for the Input Adapter, everything works fine. I setup my own profile, which has Analog buttons using X and Y axes. I removed the Horizontal and Vertical axes, I don't need them. Except for the left and right sticks, all other inputs switch from Keyboard to Gamepad. For the triggers, I have to depress them all the way in for it to switch. I'm looking at the console log that shows when Input Config was switched.
There are other changes I made in my config, you can have a look at the project in the link below. Also I've exported my config to test_profile.xml which is there in the Assets folder, in case you need it.
https://dl.dropboxusercontent.com/u/25720171/Test/InputAdapter_bug_demo.unitypackage
The AnyInput method doesn't check for joystick axes specifically. It check the axis configurations that are defined in a certain input configuration(which can be a button, a digital axis, an analog axis, etc). If the input configuration doesn't contain any axis configurations that use the left and right sticks it won't pick up any input. Just create two dummy axis configurations for the left and right sticks in the input configuration and it will work.
Yes!! That worked. That also explains why the triggers worked. Thanks a ton!