Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Navigation et Focus au clavier/manette

Il est courant pour une interface utilisateur d'avoir un support complet du clavier et des manettes pour la navigation et l'interaction. Il y a deux raisons principales pour lesquelles cela est bénéfique pour les projets : l'amélioration de l'accessibilité (tout le monde ne peut pas utiliser la souris ou les commandes tactiles pour les interactions), et le fait de préparer votre projet pour les consoles (ou simplement pour les personnes qui préfèrent jouer avec une manette sur PC).

La navigation entre les éléments de l'interface utilisateur à l'aide du clavier ou de la manette s'effectue en changeant le nœud qui est activement sélectionné. C'est ce qu'on appelle aussi changer le focus de l'interface utilisateur. Chaque nœud Control dans Godot est capable d'avoir le focus. Par défaut, certains nœuds de contrôle ont la capacité de s'emparer automatiquement du focus en réagissant à des actions d'interface utilisateur intégrées telles que ui_up, ui_down, ui_focus_next, etc. Ces actions sont visibles dans les paramètres du projet dans la carte des entrées et peuvent être modifiées.

Avertissement

Comme ces actions sont utilisées pour le focus, elles ne doivent pas être utilisées pour tout code de jeu.

Paramètres des nœuds

En plus de la logique intégrée, vous pouvez définir ce que l'on appelle les voisins du focus pour chaque nœud de contrôle individuel. Cela permet de régler avec précision le chemin que prend le focus de l'interface utilisateur dans l'interface utilisateur de votre projet. Les paramètres des nœuds individuels se trouvent dans le dock inspecteur, dans la catégorie "Focus" de la section "Control".

../../_images/focus_settings.png

Les options de voisinage sont utilisées pour définir les nœuds pour la navigation quadridirectionnelle, comme l'utilisation des touches fléchées ou du D-pad d'une manette. Par exemple, le voisin du bas sera utilisé lors de la navigation vers le bas avec la flèche vers le bas ou en appuyant sur le D-pad. Les options "Next" et "Previous" sont utilisées avec le bouton de changement de focus, tel que Tab sur les systèmes d'exploitation de bureau.

Note

Un nœud peut perdre le focus s'il devient caché.

Le réglage de mode définit comment un nœud peut obtenir le focus. All signifie qu'un nœud peut obtenir le focus en cliquant dessus avec la souris, ou en le sélectionnant avec un clavier ou une manette. Click signifie qu'on peut seulement obtenir le focus en cliquant dessus. Enfin, None signifie qu'il ne peut pas obtenir le focus. Les différents nœuds control ont des paramètres par défaut qui diffèrent selon comment ils sont généralement utilisés. Par exemple, les nœuds Label sont définis à "None" par défaut, alors que les boutons sont tous définis à "All".

Assurez-vous de configurer correctement vos scènes pour le focust et la navigation. Si un nœud n'a pas de voisin de focus configuré, le moteur essaiera de deviner automatiquement le prochain control. Cela peut entraîner un comportement involontaire, en particulier dans une interface utilisateur complexe qui n’a pas de flux de navigation vertical ou horizontal bien défini.

Code nécessaire

Pour que la navigation au clavier et à la manette fonctionne correctement, un nœud doit obtenir le focus via le code lorsque la scène démarre. Sans cela, l’appui sur des boutons ou des touches n’aura aucun effet. Voici un exemple de base pour définir le focus initial avec du code :

func _ready():
    $StartButton.grab_focus()

Désormais, lorsque la scène démarre, le nœud "Start Button" a le focus et le clavier ou une manette peut être utilisé pour naviguer entre ce nœud et d'autres éléments de l'interface utilisateur.