Up to date

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

Tastatur/Controller-Navigation und Fokus

Eine übliche Anforderung an eine Benutzeroberfläche ist die vollständige Unterstützung von Tastatur und Controller-Unterstützung für Navigation und Interaktion. Es gibt zwei Hauptgründe, warum dies für Projekte von Vorteil ist: Verbesserte Zugänglichkeit (nicht jeder kann Maus- oder Touch-Controls für Interaktionen verwenden) und die Vorbereitung Ihres Projekts für Konsolen (oder einfach für Leute, die lieber mit einem Controller auf dem PC spielen).

Das Navigieren zwischen UI-Elementen mit der Tastatur oder dem Controller erfolgt, indem der aktiv ausgewählte Node geändert wird. Dies wird auch als Änderung des UI-Fokus bezeichnet. Jeder Control-Node in Godot ist in der Lage, den Fokus zu haben. Standardmäßig haben einige Control-Nodes die Fähigkeit, automatisch den Fokus zu erhalten, indem sie auf Built-in-UI-Aktionen wie ui_up, ui_down, ui_focus_next usw. reagieren. Diese Aktionen sind in den Projekteinstellungen in der Input Map zu sehen und können geändert werden.

Warnung

Da diese Aktionen für den Fokus verwendet werden, sollten sie nicht für Gameplay-Code verwendet werden.

Node-Einstellungen

Zusätzlich zur Built-in-Logik können Sie für jeden einzelnen Control-Node so genannte Fokus-Nachbarn definieren. Damit können Sie den Pfad, den der UI-Fokus über die Benutzeroberfläche Ihres Projekts nimmt, fein abstimmen. Die Einstellungen für einzelne Nodes finden Sie im Inspektor-Dock unter der Kategorie "Fokus" im Abschnitt "Control".

../../_images/focus_settings.png

Nachbaroptionen werden verwendet, um Nodes für die Navigation in 4 Richtungen zu definieren, z.B. mit Pfeiltasten oder einem D-Pad auf einem Controller. Der untere Nachbar wird z.B. verwendet, wenn mit dem Pfeil nach unten oder durch Drücken des D-Pads nach unten navigiert wird. Die Optionen "Weiter" und "Zurück" werden mit der Fokus-Wechseltaste verwendet, z.B. Tab auf Desktop-Betriebssystemen.

Bemerkung

Ein Node kann den Fokus verlieren, wenn er ausgeblendet wird.

Die Moduseinstellung legt fest, wie ein Node fokussiert werden kann. Alle bedeutet, dass ein Node durch Anklicken mit der Maus oder durch Auswahl mit einer Tastatur oder einem Control fokussiert werden kann. Klick bedeutet, dass er nur durch Anklicken fokussiert werden kann. Schließlich bedeutet Keine, dass er überhaupt nicht fokussiert werden kann. Verschiedene Control-Nodes haben unterschiedliche Defaulteinstellungen, je nachdem, wie sie typischerweise verwendet werden. Zum Beispiel sind Label-Nodes standardmäßig auf "None" gesetzt, während Buttons auf "All" gesetzt sind.

Stellen Sie sicher, dass Sie Ihre Szenen für Fokus und Navigation richtig konfigurieren. Wenn für einen Node kein Fokus-Nachbar konfiguriert ist, versucht die Engine, das nächste Control automatisch zu erraten. Dies kann zu unbeabsichtigtem Verhalten führen, insbesondere bei einer komplexen Benutzeroberfläche, die keinen klar definierten vertikalen oder horizontalen Navigationsfluss aufweist.

Erforderlicher Code

Damit die Tastatur- und Controller-Navigation korrekt funktioniert, muss ein beliebiger Node beim Starten der Szene auf die Verwendung von Code fokussiert sein. Wenn dies nicht der Fall ist, wird das Drücken von Buttons oder Tasten nichts bewirken. Hier ist ein einfaches Beispiel für das Setzen des ersten Fokus mittels Code:

func _ready():
    $StartButton.grab_focus()

Beim Starten der Szene wird nun der Node "Start-Button" fokussiert, und die Tastatur oder ein Control kann verwendet werden, um zwischen ihm und anderen UI-Elementen zu navigieren.