Controller Support for OptionButton/PopMenu/Dropdown

If you’re like me and struggle to use the OptionButton/PopupMenu Nodes with a controller.

I would suggest using an addon that provides the features of an OptionButton with controller support but in a horizontal manner.

Spin Button by yudinikita

Disclaimer: I did not create this add-on but found it after some research.

The Spin Button has a similar implementation to an OptionButton, but its navigation is managed through the next and previous controls. When you add SBSpinButton to your project, you can simply drag and drop it into the scene. The creator, yudinikita, has done an excellent job documenting how to use the additional features of the SBSpinButton to make it appear more user-friendly. (See the image below)


Issues I faced with Godot’s OptionButton implementation:

  1. The OptionButton itself does not register the ui_accept action to show the PopupMenu when using a controller. It will work fine for the keyboard and mouse just not the controller.
  2. Calling OptionButton.show_popup() also does not make the MenuPopup appear.
  3. Calling OptionButton.get_popup().popup() will show the MenuPopup and does not appear on the screen where you would expect it to or grab focus so that you can navigate the Popup using a controller.

So… is there no way OptionButtons can work with a controller? I’m finding it a bit surprising. For me, when going through items on the OptionButton, the focus is moving elsewhere all around the screen

Godot has had some major changes since I made this post so, I’d have to recheck if this has since been fixed.

On another note after using this addon for developing more UI in Godot I’d still recommend it given many games that support controller input use similar schemes for scrolling thru options.