The Better Navigation System is designed to configure complex UIs for gamepad navigation.


Groups

The main idea is grouping Selectables in Navigation Groups. When such a group is focused, only Selectables within that group can be navigated. 


Example:
The easiest use case for this are popups: Imagine you click a button which creates a popup. Now you want to navigate between the "Okay" and "Cancel" button, but not the UI that is in the background of this popup.
With vanilla UGUI, you need to configure the navigation between the two buttons of the popup, so that they cannot navigate elsewhere (set them both to "Explicit" and drag the buttons that are allowed for navigation to the respective fields), Select one of the buttons via code when the popup appears and select some other Selectable from the "Background UI" via code when the popup disappears.
With Better Navigation, you can just add a Navigation Group to the Popup and all the logic will be handled for you (okay, you also need one Better Navigation component. See below).


Navigation Logic

As UGUI does not allow to restrict the navigation to a group of selectables (unless all navigation is defined "Explicit"), the whole Navigation logic has been replaced with a custom implementation that is very close to the logic of UGUI. To make it work, you need a Better Navigation component next to your Event System and let it "Handle Navigation Input" (see the property with that name).


The Better Navigation component also allows to ignore the "Selected" state when navigating with mouse or touch. This will improve the user experience, as the normal and highlighted states are shown the way you would expect it.


Group Controlling

Sometimes you want to have several groups of Selectables at the same time and be able to navigate between those groups. In such a scenario, you can simply add a Navigation Group Switch Controller component to the parent of all these Navigation Groups (alternatively, it can be anywhere and define a "Fixed Set" of groups).


If you have Tabs that should not be navigated directly to, but instead be controlled via other input buttons (like the shoulder buttons), you can use the Tab Switch Controller for that. Note that you also need an Input Module Addition to detect the other button presses.


Advanced Input Handling

The Better Navigation System allows more input buttons (almost a whole standard gamepad), if you add an Input Module Addition next to your Input Module. These can be used to navigate between groups of a Navigation Group Switch Controller, between tabs of a Tab Switch Controller or to trigger anything in the UI using an Input Button Trigger component.


When a button can be used, it is possible to display that to the user. An Input Action Visualization component allows this. Note that Better UI comes only with a base class. The actual implementation depends highly on the input system you are using, the way you bind your buttons, the platform you are deploying to and the artistic decision how buttons should look like in your game. Therefore, you need to implement a derived class from "BaseInputActionVisualization" yourself.


What Selectables are

This documentation mentions "Selectables" a lot. This is a type of component in Unity that is used for UI interaction. Many other components, like Button or Toggle, derive from Selectable, so they are also Selectables. Selectables are used for interaction and navigation. Therefore, Selectables all have the standard transitions ("Normal", "Highlighted", "Pressed", "Selected", "Disabled"). So, if you see these transitions somewhere, you know that it is a Selectable.