D-pad loses input after a couple frames

When I try to move my character with the D-pad on my controller, my character just stops moving after a couple frames. Sometimes it is nearly instant, sometimes I can walk a few feet.
I am not having problems with my movement form any other source. I have my “move” set up to use the D-pad, left stick, WASD, and arrow keys. All of them work just fine except the D-Pad.

Anyone else having a problem with this?

EDIT: I think I’ve found part of the problem…

For some reason, when I try using this stick and the D-pad at the same time, the D-pad input stops dead. With all the other inputs, when I give move commands from multiple places, the new input gets ignored until I stop using the first one.
However for some reason when I use the control stick while using the D-pad, the D-pad gets completely ignored, like I pulled my finger off of it. So when I stop using the stick my D-pad is useless until I take my thumb off of it and press it again.

And the controller I have plugged in right now is having problems with a drifting control stick. So it randomly adds a tiny bit of direction, not enough to get noticed but just gets past the dead zone, and so for one frame it just kills the D-pad input.

I think that’s what’s going on. Can anyone confirm the control stick overriding their D-pad?

1 Like

UPDATE:
I’ve found I’m not having this problem in my menus. The key difference is that my gameplay-move control is set to a control type of “axis.” The D-pad and the left stick are only responding to the x axis.

Can anyone else confirm if this is happening with them?

I have put a debug log into my OnMove code just to make sure this wasn’t somehow happening with something in my game code, but it confirms what I’m seeing the player do.

void OnMove(InputValue value)
    {
        if (Time.timeScale == 0)
            move = 0;
        else
            move = value.Get<float>();
        Debug.Log("Move value is " + value.Get<float>());
    }

If I use input from the arrow keys, WASD, or my gamepad’s control stick, the input from the D-pad is suddenly ignored, and releasing the D-dad will not call the OnMove function.
It only happens with my “Move” action bound as an axis control type; this problem does not exist with similar setups for vector2 control types.

Hello stranger, I can confirm I’m having this same problem but it is a Vector 2 control type. shrug Did you ever find any more info on this?

edit: I think I was able to replicate what you were describing (controls not being reset by other controls in Vector2 control type) by switching my Action Type from Pass Through to Value, hope that helps someone!

As I recall, I had to circumvent the problem by re-doing my control inputs to use a different input type, so I was tracking all the input in a very non-intuitive manner, which was very annoying.
Honestly I can’t even recall if this was from before I switched to Unity’s new input system or not.

1 Like

The same thing is happening to me. My character was controlled with the D-Pad and when adding the Joystick Stick the D-Pad started to fail. were you able to fix it?

EDIT: SOLVED! For me at least the problem seems to have come from using “passthrough” as the value type. Unity documentation indicates that this bypasses the “disambiguation” process. I am no expert by any means but this seems to make it very easy to quickly read all the possible positions of an analog stick for example but doesn’t check to see where the inputs are coming from and they can get confused inside the input system (probably by constantly spamming 0 even when the stick isn’t being used). Instead, set the action to value (NOT passthrough) with a 2D Vector control type and make two control inputs as a 2D vector composite (one for D-pad and one for the stick). Set the corresponding up/down/left/right axes to their respective stick or D-Pad directions. That fixed the issue for me, hopefully it helps!

Same problem here… I even went as far as to make two completely different methods inside my input handler scripts where I read the values from the inputs. One reads the D-Pad and the other reads the sticks. Still had the same problem. D-Pad glitches out and doesn’t allow movement while the analog stick functions fine. Using a PS4 Dualshock controller specifically.

[Solved]

Was having this problem while using the UIEventSystemInputActions default map for the new InputSystemUIInputModule.

Solved by changing the navigate action’s action type from pass through to value and it works fine.

3 Likes