gohud

Une UI de jeu pilotée par une seule ressource

gohud est un kit HUD et UI pour Godot 4.6 et versions ultérieures. Fenêtres flottantes, feuilles inférieures, boîtes de dialogue, formulaires, snackbars, repères guidés, barres de HUD, emplacements rapides et joystick virtuel fonctionnent à partir d'un seul thème et d'un seul jeu d'icônes interchangeable, et prennent en charge pour vous la zone sûre, le clavier virtuel, le sens RTL et les cibles tactiles. Six préréglages — par défaut, science-fiction et médiéval, chacun en sombre et en clair — changent les couleurs et les formes en une ligne.

Godot 4.6+ v1.0.1 GDScript pur Aucun autoload requis MIT 6 préréglages 21 langues 100 icônes incluses

Ce que ça donne dans un jeu

Les préréglages médiéval et science-fiction — fiches de personnage, inventaires et quêtes ; formulaires, grilles et cartes d'invite ; panneaux anguleux et commandes tactiles. Changer de préréglage tient en une ligne de code.

Thème médiéval de gohud — une fiche de personnage avec barres de vie, de mana et d'endurance, une besace d'emplacements rapides et un journal de quêtes dans des cadres d'or forgé
Médiéval — personnage, inventaire et quêtes
Thème médiéval de gohud — un panneau de saisie avec champ de nom, interrupteur, cases à cocher et curseur de volume, une grille de tuiles, et une carte d'invite d'invitation de groupe avec Accepter et Refuser
Médiéval — formulaires, grilles et cartes d'invite
Thème science-fiction de gohud — un panneau de commandes tactiles chanfreiné avec joystick hexagonal, un sélecteur Fixe / Suiveur / Relatif et des boutons d'action ronds
Science-fiction — panneaux anguleux et commandes tactiles

Les six préréglages et comment en changer →

Ce qu'il vous enlève des mains

Ce qui coûte le plus de temps dans une UI de jeu, ce n'est pas la forme d'un bouton — c'est tout ce qui diverge d'un appareil à l'autre. gohud traite cette dérive en un seul endroit.

Chaque mesure est un token

Les espacements, les coins et les tailles de texte sont appelés par leur nom, pas écrits en chiffres. Changez de thème et tout l'écran suit.

Taille visible ≠ taille pressable

Un bouton de fermeture paraît faire 36 dp alors que sa cible tactile en fait 48. Là où des emplacements serrés se chevauchent, c'est celui dont le centre est le plus proche qui reçoit l'appui.

Encoches et claviers

Les éléments du HUD restent dans la zone sûre, et un champ de saisie remonte au-dessus du clavier virtuel quand celui-ci apparaît.

Retour ne ferme qu'une chose

Échap et le bouton Retour d'Android ne ferment que la surface la plus haute. Des fenêtres empilées ne disparaissent pas d'un seul coup.

Les snackbars ne captent jamais la saisie

Appuyez à travers un snackbar et c'est le bouton en dessous qui reçoit l'appui. Le focus n'est pas pris non plus.

Les icônes se demandent par leur nom

Les widgets ne connaissent que GoIconSet.CLOSE. Changez de jeu et tous les dessins changent sans toucher une ligne de code.

Six apparences, une ligne

GoUi.use_preset() change d'un coup le thème, le skin et les icônes — cadres arrondis, chanfreinés science-fiction ou forgés médiévaux.

Lisibilité mesurée

Chaque thème est vérifié au regard des WCAG, y compris les états des boutons et les panneaux de HUD translucides sur blanc pur et noir pur.

Tout fonctionne sans activer le plugin. L'activer ajoute un autoload GoRuntime qui suit la taille de la fenêtre, l'échelle dp et la hauteur du clavier, ainsi que des paramètres de projet pour la ressource de configuration et le préréglage — des commodités, pas des obligations.

Installer gohud

Deux chemins. Laissez votre agent IA le faire, ou déposez le dossier dans votre projet — il n'y a rien d'autre à configurer.

Installation

Démarrage rapide

Cinq lignes affichent un écran thématisé. Le parcours complet est sur la page d'installation.

Démarrage rapide

Changer l'apparence — les couleurs et les formes

Un Theme ne peut restyler que ce que le moteur dessine. Les coins arrondis sont les seuls coins dont dispose StyleBoxFlat, et le joystick, les emplacements rapides et le repère guidé sont dessinés par du code — un thème seul ne peut donc jamais changer leur forme. gohud livre pour cela des préréglages : un thème, un skin et un jeu d'icônes choisis d'un seul tenant.

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)   # thème, skin et icônes d'un seul coup
PréréglageApparence
default_darkLe gohud d'origine — coins arrondis, accent bleu doux
default_lightLes mêmes formes sur une palette claire
scifi_darkCoins chanfreinés, arêtes néon cyan et halo, joystick hexagonal, crochets de visée
scifi_lightLes mêmes formes anguleuses dans une palette claire de plan technique
medieval_darkFer sombre et cuir, cadres d'or ancien, rivets, icônes gravées, titres en Cinzel
medieval_lightParchemin, encre et bronze avec les mêmes cadres forgés
La galerie gohud avec le préréglage default_dark — coins arrondis, accent bleu
default_dark — coins arrondis, accent bleu doux
Préréglage default_light — les mêmes formes sur une palette claire
default_light — mêmes formes, palette claire
Préréglage scifi_dark — coins chanfreinés et néon cyan
scifi_dark — coins chanfreinés, néon cyan
Préréglage scifi_light — les mêmes formes anguleuses dans une palette de plan technique
scifi_light — mêmes formes anguleuses, palette de plan technique

Ces quatre captures montrent le même écran de galerie. Pas une ligne de code ne diffère — seulement le nom du préréglage. Coins des boutons, formes des interrupteurs, rangées de liste et bordures des champs de saisie bougent ensemble.

Collection médiévale

medieval_dark associe le fer et le cuir à l'or ancien ; medieval_light emploie le parchemin et l'encre. Les cadres de menu portent un rivet et un petit ornement d'angle tandis que le HUD, toujours visible, reste discret ; 16 icônes gravées redessinent les noms d'objets, et seuls les titres et sous-titres utilisent la police Cinzel fournie.

medieval_dark — fiche de personnage, besace d'emplacements rapides et journal de quêtes
medieval_dark — fer et cuir
medieval_light — les mêmes écrans de personnage, de besace et de quêtes sur parchemin
medieval_light — parchemin et encre

Les deux captures viennent de examples/medieval/medieval.tscn, construit à partir des widgets standard. Le guide médiéval et comment créer votre propre royaume →

Le même écran sur téléphone et sur ordinateur

Les captures de la galerie sont prises sur un téléphone en portrait. Ci-dessous, le même code en 1280×800 — le contenu s'arrête à une largeur lisible (480 dp) et se centre, tandis que le HUD reste dans les coins. Le formulaire contourne les éléments de HUD flottants, mais ne bouge pas lorsqu'il en est déjà à l'écart : le décaler quand même décentrerait le contenu sur un écran large.

default_dark en 1280x800 — contenu centré, HUD dans les coins
default_dark · 1280×800
scifi_dark en 1280x800 — même mise en page avec panneaux chanfreinés et néon
scifi_dark · 1280×800

La même feuille, une autre apparence

Une feuille inférieure en default_dark
Par défaut — carte arrondie, rangée de recherche et pied de page fixes
Une feuille inférieure en scifi_dark — arête d'accent néon le long du haut
Science-fiction — arête d'accent en haut, coins coupés, halo

Choisissez-en un dans Paramètres du projet → gohud → Theme → Preset, ou renseignez GoConfig.preset. Remplir explicitement theme, skin ou icons l'emporte sur le préréglage : vous pouvez donc partir d'un préréglage et n'en redéfinir qu'un seul.

Un nouveau thème tient dans un fichier JSON. new_theme.py kingdom --from medieval_dark écrit une palette qui détaille chaque valeur héritée ; make_theme.py kingdom construit le thème, ses illustrations de contrôles et les molettes de son skin, et le préréglage apparaît dans le sélecteur. Chaque réglage et chaque molette →

Les skins — là où un Theme n'atteint pas

Un skin possède le joystick, la face des emplacements rapides, l'anneau du repère guidé, les puces, les squelettes de chargement, les alertes, les séparateurs et les en-têtes de section. Dérivez-le et ne redéfinissez que ce que vous voulez changer.

class_name MySkin extends GoSkin

func slot_box(accent: Color, lit: bool) -> StyleBox:
    var box := GoStyleBoxCut.new()
    box.bg_color = accent
    box.cut = 6.0
    box.edge_color = accent
    return box
ClasseFormes qu'elle peut produire
GoStyleBoxCutCoins coupés en diagonale (chanfrein), une arête d'accent épaissie, un halo extérieur
GoStyleBoxBracketDes marques d'angle seules, sans enfermer le contenu
GoStyleBoxMedievalUn cadre forgé avec rivets, gravure d'angle, un reflet biseauté et le grain du matériau

Les trois se sérialisent dans une ressource Theme — c'est ce qui permet à un thème de changer la forme, et pas seulement la couleur. GoSkinSciFi et GoSkinMedieval sont les sous-classes fournies.

GoStyle.box() renvoie toujours un StyleBoxFlat, parce que le code appelant le reçoit et ajuste bg_color ou corner_radius. Utilisez GoStyle.surface() lorsqu'une forme personnalisée doit survivre.

Widgets

Les pièces, en un tableau. Chacune en détail →

ClasseBaseRôle
GoSurfaceControlCoque de carte flottante — placement au centre, en bas ou ancré, en-tête et pied fixes, corps défilant, redimensionnement par glissement
GoSheetCanvasLayerDes pages qui montent depuis le bas, sur leur propre calque afin de passer au-dessus du HUD
GoDialogsNodeConfirmations et alertes que vous await ; destructive pour les actions irréversibles
GoFormMarginContainerFormulaires à largeur plafonnée qui évitent le clavier virtuel et, avec avoid_hud, le HUD
GoScrollScrollContainerDéfilement tactile ; la barre de défilement se loge dans la marge intérieure de la carte
GoNoticePanelContainerUn snackbar qui ne prend ni la saisie ni le focus
GoPromptCardPanelContainerUne question qui ne bloque pas le jeu
GoCoachMarkControlUne visite guidée qui désigne de vraies commandes ; appuyer sur la cible fait avancer
GoHudAnchorControlÉpingle les éléments de HUD à l'une des neuf positions de la zone sûre
GoBarControlBarres de vie, de mana et d'expérience avec des variations amorties
GoSlotButtonUn emplacement rapide — icône, quantité, temps de recharge et raccourci sur une seule face
GoJoystickControlStick virtuel en mode fixe, suiveur ou relatif
GoIconButtonButtonParaît petit, s'appuie grand
GoStylestatiqueBoutons, rangées de liste, champs de saisie, puces, tableaux, onglets et bien plus, fabriqués d'une seule manière cohérente

Attendre, dire, compter

ClasseBaseRôle
GoSnackbarNodele message qui se place tout seul
GoSpinnerControlune attente dont on ne voit pas la fin
GoBadgePanelContainerla pastille de non-lu, l'étiquette NOUVEAU, le 99+

Formulaires et listes

ClasseBaseRôle
GoFieldVBoxContainerla rangée qui peut être en erreur
GoInputGroupHBoxContainerune saisie soudée à son bouton
GoComboboxButtonun sélecteur qui cherche
GoCodeInputVBoxContainercodes promo et codes cadeaux
GoTableVBoxContainerdes en-têtes triables, des rangées sélectionnables
GoPaginationHBoxContainerdes pages, ou une rangée « Voir plus »

Les formes que les jeux utilisent vraiment

ClasseBaseRôle
GoRewardCalendarVBoxContainerla présence quotidienne
GoRadar · GoDonutControlles statistiques d'un coup d'œil
GoCarouselVBoxContainerbannières et sélection de personnage
GoKbdHBoxContainerdes indications de touche qui ne mentent pas

Par-dessus l'écran

ClasseBaseRôle
GoDrawerCanvasLayerle panneau latéral
GoPopoverRefCountedla carte épinglée
GoContextMenuRefCountedappui long et clic droit
GoConsoleCanvasLayerla console de développement

AI SKILL

gohud embarque une compétence IA : toute l'API, des modèles exécutables et un lanceur d'aperçu. Collez un bloc dans votre agent : il installe gohud et sait s'en servir.

AI SKILL

La lisibilité se mesure, elle ne s'estime pas à l'œil

« Joli » relève du goût ; « lisible » se mesure. Un gris pâle paraît très bien sur un bon écran et disparaît sur un téléphone en plein jour — choisir à l'œil finit toujours par y mener.

python3 addons/gohud/tools/check_contrast.py

Chaque paire de couleurs et le libellé de chaque état de bouton sur le panneau qui le porte sont mesurés au regard des WCAG, dans les six thèmes. Les couleurs translucides sont d'abord composées sur leur fond réel — les mesurer directement annonce un meilleur rapport que ce que l'écran montre.

Les couleurs de texte sont donc dérivées, pas choisies : le générateur part de l'entrée de la palette et pousse sa clarté jusqu'à ce qu'elle franchisse le seuil sur chaque surface où elle peut se poser. Changez la palette et le contraste suit. Les règles et les pièges qui les motivent →

Vérifications, versions et ce site

Un seul point d'entrée lance toutes les vérifications ; chaque partie voit ce que les autres ne voient pas.

bash addons/gohud/tools/check_all.sh
VérificationCe qu'elle attrape
run_tests.sh sur quatre tailles d'écranComportement et mise en page des widgets, positions en RTL, focus clavier, contraste du skin à l'exécution, chaque préréglage
new_project_check.shLes dépendances cachées envers un projet hôte ; avec --zip la version telle qu'elle est livrée, avec --export une build Web
check_contrast.pyLe contraste WCAG de chaque fichier de thème, états des boutons et panneaux translucides compris
check_generated.py · check_scaffold.shLes thèmes générés correspondent à leurs palettes ; un thème jetable se construit et passe le contrôle de contraste
check_package.pyLa version reprise de package.json, les déplacements dans le changelog et le contenu du ZIP, sur des copies temporaires
check_site.pyLes liens, les ancres, la langue des pages, le glossaire et les tableaux de molettes de ce site
Dernière exécution consignée — 2026-09-13, Godot 4.7.2, macOS, moteur de rendu Compatibility. 438 vérifications sur 438 en 390×844, 844×390, 768×1024 et 1280×800 dans un projet vide ; 438 sur 438 à nouveau avec l'autoload GoRuntime ; un export Web ; zéro échec de contraste sur les six thèmes. Godot 4.6 et les appareils Android ou iOS physiques ne faisaient pas partie de cette exécution.

Publier des versions

cat addons/gohud/package.json       # { "version": "1.1.0" }
bash addons/gohud/tools/package.sh  # 1.1.0 → builds/1.1.0/gohud-1.1.0.zip

La version est celle écrite dans package.json : l'empaquetage ne l'augmente jamais. Pour publier une nouvelle version, changez d'abord ce numéro. Une exécution réussie aligne plugin.cfg et GoUi.VERSION sur cette valeur et, la première fois que cette version est empaquetée, déplace les notes Unreleased de CHANGELOG.md dans une entrée datée. Réempaqueter la même version reconstruit son ZIP et remplace l'ancien. Une exécution qui échoue ne change rien. Le ZIP laisse de côté ce site, les tests, les outils et package.json.

Ce site

python3 addons/gohud/tools/make_site.py            # glossaire et tableaux de molettes de skin, générés depuis les sources
python3 addons/gohud/tools/check_site.py           # liens, ancres, langue, glossaire, tableaux générés
bash addons/gohud/tools/site_shots.sh /tmp/shots   # captures d'écran de chaque page, en version bureau et téléphone

Les pages sont du HTML simple dans www/ — l'anglais à la racine, le coréen dans ko/. Un workflow GitHub Actions publie ce dossier comme racine du site.