[BUG] "Gamepad Left X" and "Gamepad Left Y" inputs are binary only

When using a 360 controller connected to the PC, ‘Gamepad Left X’ and ‘Gamepad Left Y’ axes only give a -1 or 1 value, but never anything in between. This occurs in both my test levels and the Shooter demo. ‘Gamepad Right X’ and ‘Gamepad Right Y’ seem to work as expected.

Version 4.0.1-2027741+++depot+UE4-Releases+4.0

Thank you for reporting this issue.

I’ve submitted a report for this issue in our database and we are currently investigating it.

Please continue to let us know if you encounter additional issues.



Upon further investigation, it appears that the input data is coming through okay, but the issue is likely in CharacterMovementComponent.cpp in the TickComponent function:

Acceleration = ScaleInputAcceleration(ConstrainInputAcceleration(GetInputVector()));

GetInputVector() returns the vector, the magnitude of which is dependent on how far someone is pressing the gamepad stick. However, the ScaleInputAcceleration function normalizes that vector and then multiplies it by the max acceleration, essentially throwing the information out. This is why it appears that there is no difference when pressing the left stick a little or a lot when moving the character.

In the input settings there are two options for getting input from gamepad sticks. The first is “Gamepad Left Y” and “Gamepad Left X”, with corresponding options for the right stick. The other way is “Gamepad Left Stick Up”, “Gamepad Left Stick Down” etc.

If you are looking for axis input then you should using the first method, “Gamepad Left Y”. This will give you the position of the stick in a range of -1.0 to 1.0.

The second method, “Gamepad Left Stick Up” is intended to be used as an action input and will only give binary values, i.e. if the left stick is up, “Gamepad Left Stick Up” will give you a value of 1, otherwise it will give you 0.

Not sure if this is the issue you were having, but I was having a similar issue and this was the cause.

Yes, Gamepad Left X is analog, while Gamepad Left Stick Up/Down are digital. I was aware of this. The issue I had was the way the default character controller normalizes accelerations as mentioned in my previous post.

I think there is a property on the character movement component related to this? Pretty sure you can toggle whether the max acceleration is always used or not.

This question was from a year ago. It has been resolved in later versions of the engine.