I made this in one sitting last night to help make my game more xbox-friendly. You simply just drop it into the StarterGui and then when the player presses select it disables their controls (you must be using the new PlayerScripts layout) & puts a cursor in the middle of the screen which can then be moved around with the left trigger. When it’s hovering over a TextButton, ImageButton, or TextBox it sets GuiService.SelectedObject to that UI. You can then press A and it will click it. This is compatible with MouseButton1Click and Activated and nothing should have to be changed within your UIs.
I have noticed that this can get a little bit laggy with a ton of selectable buttons, however I tried to fix that today by not running collision calculations for UIs that aren’t visible. If you find any more problems or have an easier, less-laggy way to do this please let me know.
Here’s the model: https://www.roblox.com/library/2483911049/XboxMouse
I’ve made some changes to the way that the UI selector works, thanks to some suggestions from @goreacraft! If you’re currently using this in your game I would suggest you update to the newest version as it will be much less laggier if you have tons of UIs in your game!