Using the 4.7.5 editor I have jumpy input on the gamepad left stick ( I haven’t tried this on the right stick or triggers ). To clarify, by jumpy input, I mean that when slowly moving the stick up, I will get axis values that are mostly what you would expect, but sometimes it will give a value greater than or at 1.0 for the axis value when the stick is only partially up. Has anyone experienced this, or is there a fix?
I’m posting my resolution here, in case someone else has this problem.
Firstly, note that my “fix” is more of a hack than a proper resolution. I have a hard time believing that the current functionality is intended, so if there is a proper way to report this as a bug, please let me know.
Secondly, the cause of the problem: In the Unreal Editor, there is an intended feature that if two inputs are bound to the same axis mapping, their input scales are additive ( i.e., if both the “w” and “space” keys are set as inputs for the axis mapping “MoveForeward” with scale 1.0f, and both are pressed, then the resultant “MoveForward” value is 2.0f ). The issue I encountered with this, is that the joystick is sometimes polled twice per game loop in LinuxApplication.cpp (See FLinuxApplication::ProcessDeferredMessage). Thus, if the joystick is sitting at the 0.75f position in it’s x axis, it may be polled twice, which is an additive process, so when the game thread reads and clears the input it will report a value of 1.5f. This produces the “jumping” I was seeing, since at random times one or both of the joystick axes inputs would double.
Finally, my fix was to simply remove this additive axis mapping feature from the engine code. In UPlayerInput::InputAxis I changed
KeyState.RawValueAccumulator.X += Delta;
KeyState.RawValueAccumulator.X = Delta;
Which prevents the joystick from being additive and produces the expected result as far as I have seen. Note again, this is certainly not the best solution to the problem, but it works perfectly for me.