I’m running into a lot of issues using a gamepad with UMG’s navigation system.
My main incentive for using the system is the ability to navigate between “Focusable” buttons based on the layout without any custom logic. That part works great, which is why I’ve been so frustrated by the host of other issues.
It seems there’s no way to simply “GetFocusedWidget” without constantly iterating over every Widget and checking if HasFocus is true. This would be a pain to maintain for complicated or dynamic menus and I’m concerned about the performance cost.
AFAIK, there’s no way to prevent Gamepad Face Button Bottom triggering click events on the focused widget. This makes it impossible to have different behavior for gamepad and mouse (i.e. use OnPressed for gamepad, OnClicked for mouse.)
OnPressed and OnClicked are handled in a way that’s inconsistent with mouse logic. Holding the gamepad button and then changing focus will immediately call OnPressed on the newly focused button and OnClicked when you release the button. (Mouse clicks and presses must start and end on the same button.)
Using Navigation takes over Tab key input, so Tab can’t be used to dismiss a menu.
No way to change directional input speed.
Has anyone found solutions for these issues? If I could use the navigation logic and disable all the special input logic that comes with it, I would be happy to handle the inputs on my own, but that doesn’t seem to be an option.
I have found this to be really annoying as well. It would make sense that if UE is built for consoles as well than the UI would have a simple approch to controller navigation.
Having an input component on UserWidgets is useless in the first place because all input is routed and processed through an entirely different system, which you use by overriding a widget’s OnKeyDown and other related methods. If you’d use BindInputAction on an input component you lose the routing, prioritization, handling logic + that it doesn’t execute in the playercontroller’s input mode UI.
Trust me I’ve been trying to unfck this for way longer than I should have.