gohud

Interfejs gry napędzany jednym zasobem

gohud to zestaw HUD i UI dla Godota 4.6 i nowszych. Pływające okna, dolne arkusze, okna dialogowe, formularze, snackbary, wskazówki instruktażowe, paski HUD, szybkie sloty i wirtualny joystick działają na jednym motywie i jednym wymiennym zestawie ikon, a bezpieczny obszar, klawiaturę ekranową, RTL i obszary dotyku biorą na siebie. Sześć presetów — domyślny, sci-fi i średniowieczny, każdy w wersji ciemnej i jasnej — zmienia kolory i kształty jedną linijką.

Godot 4.6+ v1.0.1 Czysty GDScript Bez autoloadu MIT 6 presetów 21 języków 100 ikon w zestawie

Jak to wygląda w grze

Presety średniowieczny i sci-fi — karty postaci, ekwipunek i zadania; formularze, siatki i karty pytań; kanciaste panele i sterowanie dotykowe. Przełączenie presetu to jedna linijka kodu.

średniowieczny motyw gohud — karta postaci z paskami zdrowia, many i wytrzymałości, sakwa szybkich slotów i dziennik zadań w kutych złotych ramach
Średniowieczny — postać, ekwipunek i zadania
średniowieczny motyw gohud — panel wprowadzania z polem imienia, przełącznikiem, polami wyboru i suwakiem głośności, siatka kafelków oraz karta pytania z zaproszeniem do drużyny z przyciskami Akceptuj i Odrzuć
Średniowieczny — formularze, siatki i karty pytań
motyw sci-fi gohud — ścięty panel sterowania dotykowego z sześciokątnym joystickiem, przełącznikiem Fixed / Follow / Relative i okrągłymi przyciskami akcji
Sci-fi — kanciaste panele i sterowanie dotykowe

Wszystkie sześć presetów i jak je przełączać →

Co zdejmuje z twoich barków

Najwięcej czasu w interfejsie gry pochłania nie kształt przycisku — tylko wszystko to, co rozjeżdża się między urządzeniami. gohud ogarnia to rozjeżdżanie w jednym miejscu.

Każdy wymiar to token

Odstępy, narożniki i rozmiary tekstu wywołuje się po nazwie, a nie wpisuje liczbami. Podmień motyw, a cały ekran ruszy razem z nim.

Rozmiar widoczny ≠ rozmiar klikalny

Przycisk zamknięcia wygląda na 36 dp, ale jego obszar dotyku ma 48 dp. Tam, gdzie ciasno ułożone sloty zachodzą na siebie, naciśnięcie przejmuje ten, którego środek jest bliżej.

Wycięcia i klawiatury

Elementy HUD siedzą wewnątrz bezpiecznego obszaru, a pole wprowadzania unosi się ponad klawiaturę ekranową, gdy ta się pojawi.

Wstecz zamyka jedną rzecz

Escape i androidowy przycisk Wstecz zamykają tylko wierzchnią powierzchnię. Ułożone na sobie okna nie znikają razem.

Powiadomienia nie kradną wejścia

Naciśnij przez snackbar, a odbierze to przycisk pod spodem. Fokus też nie zostaje zabrany.

O ikony prosi się po nazwie

Widżety znają tylko GoIconSet.CLOSE. Podmień zestaw, a zmienią się wszystkie rysunki bez ruszania jednej linijki kodu.

Sześć wyglądów, jedna linijka

GoUi.use_preset() podmienia motyw, skórkę i ikony naraz — zaokrąglone, ścięte sci-fi albo kute średniowieczne ramy.

Czytelność z pomiaru

Każdy motyw jest sprawdzany względem WCAG, łącznie ze stanami przycisków i półprzezroczystymi panelami HUD na czystej bieli i czystej czerni.

Wszystko działa bez włączania wtyczki. Włączenie dokłada autoload GoRuntime, który śledzi rozmiar okna, skalę dp i wysokość klawiatury, oraz ustawienia projektu dla zasobu konfiguracji i presetu — to udogodnienia, nie wymagania.

Instalacja gohud

Dwie drogi. Niech zrobi to twój agent AI albo wrzuć folder do projektu — nie ma nic więcej do ustawienia.

Instalacja

Szybki start

Pięć linii wyświetla ekran z motywem. Cała droga jest na stronie instalacji.

Szybki start

Zmień wygląd — kolory i kształt

Motyw potrafi przestylizować tylko to, co rysuje silnik. Zaokrąglone narożniki to jedyne narożniki, jakie ma StyleBoxFlat, a joystick, szybkie sloty i wskazówka instruktażowa są rysowane kodem — więc sam motyw nigdy nie zmieni ich kształtu. Dlatego gohud dostarcza presety: motyw, skórkę i zestaw ikon dobrane jako jedna całość.

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)   # motyw, skórka i ikony naraz
PresetWygląd
default_darkOryginalny gohud — zaokrąglone narożniki, miękki niebieski akcent
default_lightTe same kształty na jasnej palecie
scifi_darkŚcięte narożniki, cyjanowe neonowe krawędzie i poświata, sześciokątny joystick, ramki celownicze
scifi_lightTe same kanciaste kształty w jasnej palecie rysunku technicznego
medieval_darkCiemne żelazo i skóra, ramy ze starego złota, nity, grawerowane ikony, nagłówki Cinzel
medieval_lightPergamin, atrament i brąz z tymi samymi kutymi ramami
Galeria gohud w presecie default_dark — zaokrąglone narożniki, niebieski akcent
default_dark — zaokrąglone narożniki, miękki niebieski akcent
preset default_light — te same kształty na jasnej palecie
default_light — te same kształty, jasna paleta
preset scifi_dark — ścięte narożniki i cyjanowy neon
scifi_dark — ścięte narożniki, cyjanowy neon
preset scifi_light — te same kanciaste kształty w palecie rysunku technicznego
scifi_light — te same kanciaste kształty, paleta rysunku technicznego

Te cztery to ten sam ekran galerii. Nie różni się ani linijka kodu — tylko nazwa presetu. Narożniki przycisków, kształty przełączników, wiersze list i obramowania pól wprowadzania ruszają się razem.

Kolekcja średniowieczna

medieval_dark łączy żelazo i skórę ze starym złotem; medieval_light używa pergaminu i atramentu. Ramy menu niosą nit i mały ornament narożny, podczas gdy stale widoczny HUD pozostaje spokojny; 16 grawerowanych ikon przerysowuje nazwy przedmiotów, a dołączonej czcionki Cinzel używają wyłącznie tytuły i podtytuły.

medieval_dark — karta postaci, sakwa szybkich slotów i dziennik zadań
medieval_dark — żelazo i skóra
medieval_light — te same ekrany postaci, sakwy i zadań na pergaminie
medieval_light — pergamin i atrament

Oba zrzuty to examples/medieval/medieval.tscn, zbudowane ze standardowych widżetów. Przewodnik po średniowieczu i jak zrobić własne królestwo →

Ten sam ekran na telefonie i na komputerze

Zrzuty galerii to telefon w pionie. Poniżej ten sam kod w 1280×800 — treść zatrzymuje się na czytelnej szerokości (480 dp) i centruje, a HUD zostaje w narożnikach. Formularz omija pływające elementy HUD, ale nie rusza się, gdy już ich nie dotyka: przesuwanie na siłę zrzuciłoby treść ze środka na szerokim ekranie.

default_dark w 1280x800 — treść wyśrodkowana, HUD w narożnikach
default_dark · 1280×800
scifi_dark w 1280x800 — ten sam układ ze ściętymi panelami i neonem
scifi_dark · 1280×800

Ten sam arkusz, inny wygląd

Dolny arkusz w default_dark
Domyślny — zaokrąglona karta, przyklejony wiersz wyszukiwania i stopka
Dolny arkusz w scifi_dark — neonowa krawędź akcentu wzdłuż górnej części
Sci-fi — górna krawędź akcentu, ścięte narożniki, poświata

Wybierz jeden w Ustawieniach projektu → gohud → Theme → Preset albo ustaw GoConfig.preset. Jawne wypełnienie theme, skin lub icons wygrywa z presetem, więc możesz wziąć preset i nadpisać tylko jedną z tych rzeczy.

Nowy motyw to jeden plik JSON. new_theme.py kingdom --from medieval_dark zapisuje paletę, która wypisuje wprost każdą odziedziczoną wartość; make_theme.py kingdom buduje motyw, jego grafiki kontrolek i pokrętła skórki, a preset pojawia się w selektorze. Każde ustawienie i pokrętło →

Skórki — tam, gdzie motyw nie sięga

Skórka posiada joystick, lica szybkich slotów, pierścień wskazówki instruktażowej, chipy, szkielety, alerty, separatory i nagłówki sekcji. Odziedzicz po niej i nadpisz tylko to, co chcesz zmienić.

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
KlasaJakie kształty potrafi zrobić
GoStyleBoxCutUkośnie ścięte narożniki (fazowanie), jedna pogrubiona krawędź akcentu, zewnętrzna poświata
GoStyleBoxBracketSame znaczniki narożne, bez zamykania treści w ramie
GoStyleBoxMedievalKuta rama z nitami, grawerem w narożnikach, podświetleniem fazy i fakturą materiału

Wszystkie trzy serializują się do zasobu Theme — i to właśnie pozwala motywowi zmieniać kształt, a nie tylko kolor. GoSkinSciFi i GoSkinMedieval to dostarczone podklasy.

GoStyle.box() zawsze zwraca StyleBoxFlat, ponieważ kod wywołujący go otrzymuje i dostraja bg_color albo corner_radius. Gdy własny kształt ma przetrwać, użyj GoStyle.surface().

Widżety

Wszystkie elementy w jednej tabeli. Każdy z nich szczegółowo →

KlasaKlasa bazowaCo robi
GoSurfaceControlPowłoka pływającej karty — położenie na środku, u dołu albo przy kontrolce, przyklejony nagłówek i stopka, przewijane ciało, zmiana rozmiaru przeciągnięciem
GoSheetCanvasLayerStrony wznoszące się od dołu, na własnej warstwie, więc siedzą ponad HUD
GoDialogsNodePotwierdzenia i alerty, na które czekasz przez await; destructive dla działań nieodwracalnych
GoFormMarginContainerFormularze z ograniczoną szerokością, omijające klawiaturę ekranową, a z avoid_hud także HUD
GoScrollScrollContainerPrzewijanie dotykiem; pasek przewijania chowa się w marginesie wewnętrznym karty
GoNoticePanelContainerSnackbar, który nie zabiera ani wejścia, ani fokusu
GoPromptCardPanelContainerPytanie, które nie blokuje gry
GoCoachMarkControlPrzewodnik wskazujący prawdziwe kontrolki; naciśnięcie celu przesuwa go dalej
GoHudAnchorControlPrzypina elementy HUD do jednego z dziewięciu miejsc w bezpiecznym obszarze
GoBarControlPaski zdrowia, many i doświadczenia z wygładzonymi zmianami
GoSlotButtonSzybki slot — ikona, liczba, odnowienie i skrót na jednym licu
GoJoystickControlWirtualny joystick w trybie stałym, podążającym albo względnym
GoIconButtonButtonWygląda na mały, naciska się duży
GoStylestatycznaPrzyciski, wiersze list, pola wprowadzania, chipy, tabele, zakładki i więcej, tworzone w jeden spójny sposób

Czekanie, mówienie, liczenie

KlasaKlasa bazowaCo robi
GoSnackbarNodekomunikat, który sam się umieszcza
GoSpinnerControlczekanie, którego końca nie widać
GoBadgePanelContainerkropka nieprzeczytanych, etykietka NOWE, 99+

Formularze i listy

KlasaKlasa bazowaCo robi
GoFieldVBoxContainerwiersz, który może być błędny
GoInputGroupHBoxContainerpole wprowadzania zespawane ze swoim przyciskiem
GoComboboxButtonlista wyboru, która szuka
GoCodeInputVBoxContainerkody kuponów i prezentów
GoTableVBoxContainersortowalne nagłówki, wybieralne wiersze
GoPaginationHBoxContainerstrony albo wiersz Więcej

Kształty, których gry naprawdę używają

KlasaKlasa bazowaCo robi
GoRewardCalendarVBoxContainercodzienna obecność
GoRadar · GoDonutControlstatystyki na pierwszy rzut oka
GoCarouselVBoxContainerbanery i wybór postaci
GoKbdHBoxContainerpodpowiedzi klawiszy, które nie kłamią

Ponad ekranem

KlasaKlasa bazowaCo robi
GoDrawerCanvasLayerpanel boczny
GoPopoverRefCountedkarta przypięta do miejsca
GoContextMenuRefCountedprzytrzymanie i prawy przycisk myszy
GoConsoleCanvasLayerkonsola dewelopera

AI SKILL

gohud zawiera umiejętność AI: całe API, gotowe do uruchomienia szablony i podgląd. Wklej jeden blok do swojego agenta — zainstaluje gohud i będzie wiedział, jak go używać.

AI SKILL

Czytelność się mierzy, a nie ocenia na oko

„Ładne” to kwestia gustu; „czytelne” da się zmierzyć. Blady szary tekst wygląda dobrze na dobrym monitorze i znika na telefonie w słońcu — wybieranie na oko prędzej czy później to gwarantuje.

python3 addons/gohud/tools/check_contrast.py

Każda para kolorów i etykieta każdego stanu przycisku na panelu, na którym leży, jest mierzona względem WCAG, we wszystkich sześciu motywach. Półprzezroczyste kolory są najpierw składane na swoim prawdziwym tle — mierzenie ich wprost daje lepszy współczynnik, niż pokazuje ekran.

Kolory tekstu są więc wyprowadzane, a nie wybierane: builder bierze wpis z palety jako punkt wyjścia i przesuwa jego jasność, aż przekroczy próg na każdej powierzchni, na której może wylądować. Zmień paletę, a kontrast pójdzie za nią. Zasady i pułapki, które za nimi stoją →

Kontrole, wydania i ta strona

Jeden punkt wejścia uruchamia wszystkie kontrole; każda część widzi coś, czego nie widzą pozostałe.

bash addons/gohud/tools/check_all.sh
KontrolaCo wyłapuje
run_tests.sh w czterech rozmiarach ekranuZachowanie i układ widżetów, pozycje RTL, fokus klawiatury, kontrast skórki w czasie działania, każdy preset
new_project_check.shUkryte zależności od projektu-gospodarza; z --zip wydanie w postaci wysyłkowej, z --export build webowy
check_contrast.pyKontrast WCAG każdego pliku motywu, wliczając stany przycisków i półprzezroczyste panele
check_generated.py · check_scaffold.shWygenerowane motywy zgadzają się ze swoimi paletami; jednorazowy motyw buduje się i przechodzi kontrolę kontrastu
check_package.pyWersja brana z package.json, przenoszenie wpisów changelogu i zawartość ZIP-a, w kopiach tymczasowych
check_site.pyLinki tej strony, kotwice, język stron, słowniczek i tabele pokręteł
Ostatni zapisany przebieg — 2026-09-13, Godot 4.7.2, macOS, renderer Compatibility. 438 z 438 kontroli w 390×844, 844×390, 768×1024 i 1280×800 w pustym projekcie; ponownie 438 z 438 z autoloadem GoRuntime; eksport webowy; zero niepowodzeń kontrastu w sześciu motywach. Godot 4.6 ani fizyczne urządzenia z Androidem czy iOS nie były częścią tego przebiegu.

Wydawanie wersji

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

Wersja to ta zapisana w package.json — pakowanie nigdy jej nie podbija. Aby wydać nową wersję, najpierw zmień ten numer. Udany przebieg ustawia plugin.cfg i GoUi.VERSION na tę wartość, a przy pierwszym pakowaniu danej wersji przenosi notatki z sekcji Unreleased w CHANGELOG.md do datowanego wpisu. Ponowne pakowanie tej samej wersji buduje jej ZIP od nowa i zastępuje poprzedni. Nieudany przebieg nie zmienia niczego. ZIP pomija tę witrynę, testy, narzędzia i package.json.

Ta witryna

python3 addons/gohud/tools/make_site.py            # słowniczek i tabele pokręteł skórek, generowane ze źródeł
python3 addons/gohud/tools/check_site.py           # linki, kotwice, język, słowniczek, generowane tabele
bash addons/gohud/tools/site_shots.sh /tmp/shots   # zrzuty każdej strony na komputerze i telefonie

Strony to zwykły HTML w www/ — angielski w katalogu głównym, koreański w ko/. Workflow GitHub Actions publikuje ten folder jako korzeń witryny.