gohud

UI de jogo, movida por um único recurso

O gohud é um kit de HUD e UI para o Godot 4.6 e versões mais novas. Janelas flutuantes, folhas inferiores, diálogos, formulários, snackbars, coach marks, barras de HUD, slots rápidos e um joystick virtual funcionam a partir de um tema e um conjunto de ícones intercambiável, e cuidam da área segura, do teclado virtual, do RTL e das áreas de toque por você. Seis presets — padrão, sci-fi e medieval, cada um em versão escura e clara — mudam cores e formas em uma linha.

Godot 4.6+ v1.0.1 GDScript puro Sem autoload MIT 6 presets 21 idiomas 100 ícones inclusos

Como fica dentro de um jogo

Os presets medieval e sci-fi — fichas de personagem, inventários e missões; formulários, grades e prompt cards; painéis angulares e controles de toque. Trocar de preset é uma linha de código.

tema medieval do gohud — uma ficha de personagem com barras de vida, mana e estamina, uma bolsa de slots rápidos e um diário de missões em molduras de ouro forjado
Medieval — personagem, inventário e missões
tema medieval do gohud — um painel de entrada com campo de nome, interruptor, caixas de seleção e controle deslizante de volume, uma grade de blocos e um prompt card de convite para o grupo com Aceitar e Recusar
Medieval — formulários, grades e prompt cards
tema sci-fi do gohud — um painel de controles de toque com cantos chanfrados, joystick hexagonal, um seletor Fixo / Seguir / Relativo e botões de ação redondos
Sci-fi — painéis angulares e controles de toque

Todos os seis presets e como trocá-los →

O que ele tira das suas mãos

O que mais custa tempo em UI de jogo não é o formato de um botão — é tudo aquilo que se desencontra de um aparelho para outro. O gohud resolve esse desencontro em um só lugar.

Toda medida é um token

Espaçamentos, cantos e tamanhos de texto são chamados pelo nome, não escritos como números. Troque o tema e a tela inteira acompanha.

Tamanho visível ≠ tamanho de toque

Um botão de fechar aparenta 36dp, mas sua área de toque tem 48dp. Onde slots apertados se sobrepõem, o toque vai para aquele cujo centro está mais perto.

Notches e teclados

As peças do HUD ficam dentro da área segura, e um campo de entrada sobe acima do teclado virtual quando ele aparece.

Voltar fecha uma coisa só

Escape e o Voltar do Android fecham apenas a superfície mais acima. Janelas empilhadas não somem todas juntas.

Avisos nunca roubam o toque

Toque através de um snackbar e o botão embaixo dele recebe o toque. O foco também não é tomado.

Ícones são pedidos pelo nome

Os widgets só conhecem GoIconSet.CLOSE. Troque o conjunto e todos os desenhos mudam sem tocar em uma linha de código.

Seis visuais, uma linha

GoUi.use_preset() troca tema, skin e ícones de uma vez — molduras arredondadas, chanfradas sci-fi ou forjadas medievais.

Legível por medição

Todo tema é conferido contra a WCAG, incluindo os estados dos botões e os painéis de HUD translúcidos sobre branco puro e preto puro.

Tudo funciona sem ativar o plugin. Ativá-lo adiciona um autoload GoRuntime que acompanha o tamanho da janela, a escala de dp e a altura do teclado, além de configurações de projeto para o recurso de configuração e para o preset — conveniências, não requisitos.

Instalar o gohud

Dois caminhos. Deixe o seu agente de IA fazer, ou solte a pasta no seu projeto — não há mais nada para configurar.

Instalação

Início rápido

Cinco linhas colocam um ecrã com tema no visor. O percurso completo está na página de instalação.

Início rápido

Mude o visual — cores e forma

Um Theme só consegue reestilizar aquilo que a engine desenha. Cantos arredondados são os únicos cantos que o StyleBoxFlat tem, e o joystick, os slots rápidos e o coach mark são desenhados por código — então um tema sozinho nunca muda a forma deles. Por isso o gohud traz presets: um tema, uma skin e um conjunto de ícones escolhidos como uma unidade só.

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)   # tema, skin e ícones de uma vez
PresetVisual
default_darkO gohud original — cantos arredondados, destaque em azul suave
default_lightAs mesmas formas em uma paleta clara
scifi_darkCantos chanfrados, bordas e brilho em neon ciano, joystick hexagonal, colchetes de mira
scifi_lightAs mesmas formas angulares em uma paleta clara de blueprint
medieval_darkFerro escuro e couro, molduras de ouro envelhecido, rebites, ícones gravados, títulos em Cinzel
medieval_lightPergaminho, tinta e bronze com as mesmas molduras forjadas
A galeria do gohud com o preset default_dark — cantos arredondados, destaque azul
default_dark — cantos arredondados, destaque em azul suave
preset default_light — as mesmas formas em uma paleta clara
default_light — mesmas formas, paleta clara
preset scifi_dark — cantos chanfrados e neon ciano
scifi_dark — cantos chanfrados, neon ciano
preset scifi_light — as mesmas formas angulares em uma paleta blueprint
scifi_light — mesmas formas angulares, paleta blueprint

Essas quatro são a mesma tela de galeria. Não há uma linha de código de diferença — só o nome do preset. Cantos dos botões, formato dos interruptores, linhas de lista e bordas dos campos mudam todos juntos.

Coleção medieval

O medieval_dark combina ferro e couro com ouro envelhecido; o medieval_light usa pergaminho e tinta. As molduras de menu levam um rebite e um pequeno ornamento de canto, enquanto o HUD sempre visível fica discreto; 16 ícones gravados redesenham os nomes de itens, e só títulos e subtítulos usam a fonte Cinzel que acompanha o pacote.

medieval_dark — ficha de personagem, bolsa de slots rápidos e diário de missões
medieval_dark — ferro e couro
medieval_light — as mesmas telas de personagem, bolsa e missões em pergaminho
medieval_light — pergaminho e tinta

As duas capturas são examples/medieval/medieval.tscn, montadas com os widgets padrão. O guia medieval e como criar o seu próprio reino →

A mesma tela no celular e no desktop

As capturas da galeria são de um celular em retrato. Abaixo está o mesmo código a 1280×800 — o conteúdo para em uma largura legível (480dp) e se centraliza, enquanto o HUD continua nos cantos. O formulário contorna as peças flutuantes do HUD, mas não se move quando já está livre delas: empurrar mesmo assim jogaria o conteúdo para fora do centro em uma tela larga.

default_dark a 1280x800 — conteúdo centralizado, HUD nos cantos
default_dark · 1280×800
scifi_dark a 1280x800 — o mesmo layout com painéis chanfrados e neon
scifi_dark · 1280×800

A mesma folha, outro visual

Uma folha inferior no default_dark
Padrão — cartão arredondado, linha de busca e rodapé fixos
Uma folha inferior no scifi_dark — borda de destaque em neon ao longo do topo
Sci-fi — borda de destaque no topo, cantos cortados, brilho

Escolha um em Configurações do Projeto → gohud → Theme → Preset ou defina GoConfig.preset. Preencher theme, skin ou icons explicitamente vence o preset, então você pode pegar um preset e sobrescrever só um deles.

Um tema novo é um arquivo JSON. new_theme.py kingdom --from medieval_dark escreve uma paleta com todos os valores herdados escritos por extenso; make_theme.py kingdom monta o tema, a arte dos controles e os dials da skin, e o preset aparece no seletor. Cada configuração e cada dial →

Skins — onde um Theme não alcança

Uma skin é dona do joystick, das faces dos slots rápidos, do anel do coach mark, dos chips, dos esqueletos de carregamento, dos alertas, dos divisores e dos títulos de seção. Crie uma subclasse e sobrescreva só o que quiser mudar.

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
ClasseFormas que ela consegue fazer
GoStyleBoxCutCantos cortados na diagonal (chanfro), uma borda de destaque mais grossa, um brilho externo
GoStyleBoxBracketSó as marcas de canto, sem cercar o conteúdo
GoStyleBoxMedievalUma moldura forjada com rebites, gravação nos cantos, um realce de bisel e a textura do material

As três serializam dentro de um recurso Theme — é isso que permite a um tema mudar a forma, não só a cor. GoSkinSciFi e GoSkinMedieval são as subclasses que já vêm prontas.

GoStyle.box() sempre devolve um StyleBoxFlat, porque quem chama recebe o objeto e ajusta bg_color ou corner_radius. Use GoStyle.surface() quando uma forma personalizada precisa sobreviver.

Widgets

As peças, em uma tabela só. Cada uma em detalhe →

ClasseBaseO que faz
GoSurfaceControlCasca de cartão flutuante — posicionamento ao centro, embaixo ou ancorado, cabeçalho e rodapé fixos, corpo rolável, redimensionamento por arraste
GoSheetCanvasLayerPáginas que sobem de baixo, em uma camada própria para ficarem acima do HUD
GoDialogsNodeConfirmações e alertas que você aguarda com await; destructive para ações irreversíveis
GoFormMarginContainerFormulários com largura máxima que se desviam do teclado virtual e, com avoid_hud, do HUD
GoScrollScrollContainerRolagem por toque; a barra de rolagem se encaixa no respiro do cartão
GoNoticePanelContainerUm snackbar que não toma nem o toque nem o foco
GoPromptCardPanelContainerUma pergunta que não bloqueia o jogo
GoCoachMarkControlUm tour guiado que aponta para controles de verdade; tocar no alvo avança
GoHudAnchorControlFixa as peças do HUD em um dos nove pontos da área segura
GoBarControlBarras de vida, mana e experiência com mudanças suavizadas
GoSlotButtonUm slot rápido — ícone, quantidade, cooldown e atalho em uma só face
GoJoystickControlStick virtual nos modos fixo, seguir ou relativo
GoIconButtonButtonParece pequeno, recebe toque grande
GoStyleestáticoBotões, linhas de lista, campos, chips, tabelas, abas e mais, feitos sempre do mesmo jeito

Esperando, avisando, contando

ClasseBaseO que faz
GoSnackbarNodea mensagem que se posiciona sozinha
GoSpinnerControluma espera sem fim à vista
GoBadgePanelContainero pontinho de não lido, a etiqueta NOVO, o 99+

Formulários e listas

ClasseBaseO que faz
GoFieldVBoxContainera linha que pode estar errada
GoInputGroupHBoxContaineruma entrada soldada ao botão dela
GoComboboxButtonum seletor que busca
GoCodeInputVBoxContainercódigos de cupom e de presente
GoTableVBoxContainercabeçalhos ordenáveis, linhas selecionáveis
GoPaginationHBoxContainerpáginas, ou uma linha Mais

Formas que os jogos realmente usam

ClasseBaseO que faz
GoRewardCalendarVBoxContainerpresença diária
GoRadar · GoDonutControlatributos de relance
GoCarouselVBoxContainerbanners e seleção de personagem
GoKbdHBoxContainerdicas de tecla que não mentem

Por cima da tela

ClasseBaseO que faz
GoDrawerCanvasLayero painel lateral
GoPopoverRefCountedo cartão ancorado
GoContextMenuRefCountedtoque longo e clique direito
GoConsoleCanvasLayero console de desenvolvimento

AI SKILL

O gohud traz uma skill de IA: toda a API, modelos prontos a correr e um lançador de pré-visualização. Cole um bloco no seu agente e ele instala o gohud e sabe usá-lo.

AI SKILL

A legibilidade é medida, não avaliada no olho

"Bonito" é gosto; "legível" dá para medir. Um texto cinza fraco fica bem em um bom monitor e some em um celular sob a luz do dia — escolher no olho garante que isso vai acontecer mais cedo ou mais tarde.

python3 addons/gohud/tools/check_contrast.py

Todo par de cores e o rótulo de cada estado de botão sobre o painel em que ele está são medidos contra a WCAG, nos seis temas. Cores translúcidas são primeiro compostas sobre o fundo real — medi-las direto relata uma razão melhor do que a tela mostra.

Por isso as cores de texto são derivadas, não escolhidas: o gerador toma a entrada da paleta como ponto de partida e empurra a luminosidade dela até passar do limite em toda superfície onde ela pode cair. Mude a paleta e o contraste acompanha. As regras e as armadilhas por trás delas →

Verificações, releases e este site

Um único ponto de entrada roda todas as verificações; cada parte enxerga algo que as outras não veem.

bash addons/gohud/tools/check_all.sh
VerificaçãoO que ela pega
run_tests.sh em quatro tamanhos de telaComportamento e layout dos widgets, posições em RTL, foco de teclado, contraste da skin em tempo de execução, todos os presets
new_project_check.shDependências escondidas de um projeto hospedeiro; com --zip, o release como ele é distribuído, com --export, um build Web
check_contrast.pyContraste WCAG de cada arquivo de tema, incluindo estados de botão e painéis translúcidos
check_generated.py · check_scaffold.shOs temas gerados batem com suas paletas; um tema descartável é gerado e passa no contraste
check_package.pyA versão lida do package.json, movimentação do changelog e conteúdo do ZIP, em cópias temporárias
check_site.pyOs links deste site, as âncoras, o idioma da página, o glossário e as tabelas de dials
Última execução registrada — 2026-09-13, Godot 4.7.2, macOS, renderizador Compatibility. 438 de 438 verificações a 390×844, 844×390, 768×1024 e 1280×800 em um projeto vazio; 438 de 438 de novo com o autoload GoRuntime; uma exportação Web; zero falhas de contraste nos seis temas. O Godot 4.6 e aparelhos Android ou iOS físicos não fizeram parte desta execução.

Versões de release

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

A versão é a que está escrita em package.json — o empacotamento nunca a incrementa. Para lançar uma versão nova, mude primeiro esse número. Uma execução bem-sucedida ajusta plugin.cfg e GoUi.VERSION a esse valor e, na primeira vez que essa versão é empacotada, move as notas de Unreleased do CHANGELOG.md para uma entrada datada. Empacotar de novo a mesma versão reconstrói o ZIP dela e substitui o anterior. Uma execução que falha não muda nada. O ZIP deixa de fora este site, os testes, as ferramentas e o package.json.

Este site

python3 addons/gohud/tools/make_site.py            # glossário e tabelas de dials das skins, gerados a partir do código
python3 addons/gohud/tools/check_site.py           # links, âncoras, idioma, glossário, tabelas geradas
bash addons/gohud/tools/site_shots.sh /tmp/shots   # capturas de desktop e de celular de todas as páginas

As páginas são HTML puro em www/ — inglês na raiz, coreano em ko/. Um workflow do GitHub Actions publica essa pasta como raiz do site.