gohud

UI game, digerakkan oleh satu resource

gohud adalah kit HUD dan UI untuk Godot 4.6 ke atas. Jendela mengambang, lembar bawah, dialog, formulir, snackbar, coach mark, bar HUD, slot cepat, dan joystick virtual semuanya berjalan dari satu tema dan satu set ikon yang bisa ditukar, sekaligus mengurus area aman, keyboard virtual, RTL, dan target sentuh untuk Anda. Enam preset — default, sci-fi, dan abad pertengahan, masing-masing gelap dan terang — mengubah warna dan bentuk dalam satu baris.

Godot 4.6+ v1.0.1 GDScript murni Tanpa autoload MIT 6 preset 21 bahasa 100 ikon disertakan

Seperti apa tampilannya di dalam game

Preset abad pertengahan dan sci-fi — lembar karakter, inventaris, dan misi; formulir, grid, dan kartu ajakan; panel bersudut dan kontrol sentuh. Mengganti preset cukup satu baris kode.

Tema abad pertengahan gohud — lembar karakter dengan bar darah, mana, dan stamina, sebuah tas berisi slot cepat, serta jurnal misi dalam bingkai emas tempaan
Abad pertengahan — karakter, inventaris, dan misi
Tema abad pertengahan gohud — panel masukan dengan kolom nama, sakelar, kotak centang, dan penggeser volume, sebuah grid petak, serta kartu ajakan undangan kelompok dengan Terima dan Tolak
Abad pertengahan — formulir, grid, dan kartu ajakan
Tema sci-fi gohud — panel kontrol sentuh bersudut potong dengan joystick heksagonal, sakelar Fixed / Follow / Relative, dan tombol aksi bulat
Sci-fi — panel bersudut dan kontrol sentuh

Keenam preset dan cara menggantinya →

Apa yang tidak perlu lagi Anda urus

Yang paling menyita waktu di UI game bukanlah bentuk sebuah tombol — melainkan segala hal yang berbeda-beda antarperangkat. gohud mengurus perbedaan itu di satu tempat.

Setiap ukuran adalah token

Jarak, sudut, dan ukuran teks dipanggil lewat nama, bukan ditulis sebagai angka. Tukar temanya dan seluruh layar ikut berubah.

Ukuran terlihat ≠ ukuran yang bisa ditekan

Tombol tutup terlihat 36dp tetapi target sentuhnya 48dp. Di tempat slot berdesakan saling tumpang tindih, yang pusatnya lebih dekat yang menerima tekanan.

Notch dan keyboard

Bagian-bagian HUD duduk di dalam area aman, dan kolom masukan naik ke atas keyboard virtual begitu keyboard muncul.

Tombol kembali menutup satu hal

Escape dan tombol Back Android menutup hanya permukaan paling atas. Jendela yang bertumpuk tidak lenyap bersamaan.

Pemberitahuan tidak pernah merampas input

Tekan menembus snackbar dan tombol di bawahnya tetap menerimanya. Fokus pun tidak diambil.

Ikon diminta lewat namanya

Widget hanya tahu GoIconSet.CLOSE. Tukar setnya dan semua gambar berubah tanpa menyentuh satu baris kode.

Enam tampilan, satu baris

GoUi.use_preset() menukar tema, skin, dan ikon sekaligus — bingkai membulat, sci-fi bersudut potong, atau tempaan abad pertengahan.

Keterbacaan yang terukur

Setiap tema diperiksa terhadap WCAG, termasuk keadaan tombol dan panel HUD tembus pandang di atas putih murni dan hitam murni.

Semuanya berjalan tanpa mengaktifkan plugin. Mengaktifkannya menambahkan autoload GoRuntime yang melacak ukuran jendela, skala dp, dan tinggi keyboard, ditambah project setting untuk resource konfigurasi dan preset — kemudahan, bukan keharusan.

Memasang gohud

Dua jalan. Serahkan pada agen AI, atau letakkan foldernya di proyekmu — tidak ada lagi yang perlu diatur.

Instalasi

Mulai cepat

Lima baris menampilkan layar bertema. Langkah lengkapnya ada di halaman pemasangan.

Mulai cepat

Ubah tampilan — warna dan bentuk

Sebuah Theme hanya bisa mengubah gaya apa yang digambar mesin. Sudut membulat adalah satu-satunya sudut yang dimiliki StyleBoxFlat, sedangkan joystick, slot cepat, dan coach mark digambar oleh kode — jadi tema saja tidak akan pernah bisa mengubah bentuknya. Karena itu gohud menyediakan preset: tema, skin, dan set ikon yang dipilih sebagai satu paket.

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)   # tema, skin, dan ikon sekaligus
PresetTampilan
default_darkgohud yang asli — sudut membulat, aksen biru lembut
default_lightBentuk yang sama pada palet terang
scifi_darkSudut potong, tepi dan pendar neon sian, joystick heksagonal, kurung penanda sasaran
scifi_lightBentuk bersudut yang sama dalam palet cetak biru yang cerah
medieval_darkBesi gelap dan kulit, bingkai emas antik, paku keling, ikon ukiran, judul Cinzel
medieval_lightPerkamen, tinta, dan perunggu dengan bingkai tempaan yang sama
Galeri gohud dengan preset default_dark — sudut membulat, aksen biru
default_dark — sudut membulat, aksen biru lembut
Preset default_light — bentuk yang sama pada palet terang
default_light — bentuk sama, palet terang
Preset scifi_dark — sudut potong dan neon sian
scifi_dark — sudut potong, neon sian
Preset scifi_light — bentuk bersudut yang sama dalam palet cetak biru
scifi_light — bentuk bersudut sama, palet cetak biru

Keempatnya adalah layar galeri yang sama. Tidak ada satu baris kode pun yang berbeda — hanya nama presetnya. Sudut tombol, bentuk sakelar, baris daftar, dan garis tepi kolom masukan semuanya berubah bersamaan.

Koleksi abad pertengahan

medieval_dark memadukan besi dan kulit dengan emas antik; medieval_light memakai perkamen dan tinta. Bingkai menu membawa paku keling dan ornamen sudut kecil, sementara HUD yang selalu terlihat tetap tenang; 16 ikon ukiran menggambar ulang nama-nama benda, dan hanya judul serta subjudul yang memakai font Cinzel bawaan.

medieval_dark — lembar karakter, tas berisi slot cepat, dan jurnal misi
medieval_dark — besi dan kulit
medieval_light — layar karakter, tas, dan misi yang sama di atas perkamen
medieval_light — perkamen dan tinta

Kedua tangkapan layar itu adalah examples/medieval/medieval.tscn, dibangun dari widget standar. Panduan abad pertengahan dan cara membuat kerajaan Anda sendiri →

Layar yang sama di ponsel dan di desktop

Tangkapan layar galeri itu ponsel dalam mode potret. Di bawah ini kode yang sama pada 1280×800 — kontennya berhenti pada lebar yang nyaman dibaca (480dp) lalu memusat, sementara HUD tetap di sudut-sudut. Formulirnya memutari bagian HUD yang mengambang, tetapi tidak bergeser bila memang sudah tidak bertabrakan: memaksanya bergeser justru akan melempar konten keluar dari pusat pada layar lebar.

default_dark pada 1280x800 — konten memusat, HUD di sudut-sudut
default_dark · 1280×800
scifi_dark pada 1280x800 — tata letak sama dengan panel bersudut potong dan neon
scifi_dark · 1280×800

Lembar yang sama, tampilan yang berbeda

Sebuah lembar bawah dalam default_dark
Default — kartu membulat, baris pencarian dan footer yang menempel
Sebuah lembar bawah dalam scifi_dark — tepi aksen neon di sepanjang bagian atas
Sci-fi — tepi aksen di atas, sudut terpotong, pendar

Pilih salah satu dari Project Settings → gohud → Theme → Preset, atau setel GoConfig.preset. Mengisi theme, skin, atau icons secara eksplisit mengalahkan preset, sehingga Anda bisa memakai sebuah preset dan menimpa salah satunya saja.

Tema baru cukup satu berkas JSON. new_theme.py kingdom --from medieval_dark menulis palet yang menjabarkan setiap nilai warisan; make_theme.py kingdom membangun temanya, gambar kontrolnya, dan kenop skinnya, lalu presetnya muncul di pemilih. Setiap setelan dan kenop →

Skin — tempat yang tak terjangkau Theme

Sebuah skin memiliki joystick, muka slot cepat, cincin coach mark, chip, kerangka pemuatan, peringatan, pemisah, dan judul bagian. Turunkan kelasnya dan timpa hanya apa yang ingin Anda ubah.

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
KelasBentuk yang bisa dibuatnya
GoStyleBoxCutSudut terpotong diagonal (chamfer), satu tepi aksen yang ditebalkan, pendar di luar
GoStyleBoxBracketHanya penanda sudut, tanpa mengurung kontennya
GoStyleBoxMedievalBingkai tempaan dengan paku keling, ukiran sudut, sorotan bevel, dan serat material

Ketiganya tersimpan ke dalam resource Theme — dan itulah yang membuat sebuah tema bisa mengubah bentuk, bukan hanya warna. GoSkinSciFi dan GoSkinMedieval adalah subkelas bawaan.

GoStyle.box() selalu mengembalikan StyleBoxFlat, karena kode pemanggilnya menerima objek itu lalu menyetel bg_color atau corner_radius. Pakai GoStyle.surface() bila bentuk khusus harus tetap bertahan.

Widget

Seluruh bagiannya dalam satu tabel. Rinciannya satu per satu →

KelasBasisFungsinya
GoSurfaceControlCangkang kartu mengambang — penempatan di tengah, bawah, atau tertambat, header dan footer yang menempel, body yang bergulir, tarik untuk mengubah ukuran
GoSheetCanvasLayerHalaman yang naik dari bawah, pada lapisannya sendiri sehingga selalu berada di atas HUD
GoDialogsNodeKonfirmasi dan peringatan yang bisa Anda await; destructive untuk tindakan yang tak bisa dibatalkan
GoFormMarginContainerFormulir berlebar terbatas yang menghindari keyboard virtual dan, dengan avoid_hud, menghindari HUD
GoScrollScrollContainerGulir sentuh; bilah gulirnya menyelip ke dalam padding kartu
GoNoticePanelContainerSnackbar yang tidak mengambil input maupun fokus
GoPromptCardPanelContainerPertanyaan yang tidak menghentikan jalannya game
GoCoachMarkControlTur berpemandu yang menunjuk kontrol sungguhan; menekan sasarannya akan melanjutkan tur
GoHudAnchorControlMenyematkan bagian HUD ke salah satu dari sembilan titik area aman
GoBarControlBar darah, mana, dan pengalaman dengan perubahan yang dilandaikan
GoSlotButtonSatu slot cepat — ikon, jumlah, waktu jeda, dan pintasan pada satu muka
GoJoystickControlStik virtual dalam mode tetap, mengikuti, atau relatif
GoIconButtonButtonTerlihat kecil, ditekan besar
GoStylestatisTombol, baris daftar, kolom masukan, chip, tabel, tab, dan lainnya, dibuat dengan satu cara yang konsisten

Menunggu, memberi tahu, menghitung

KelasBasisFungsinya
GoSnackbarNodepesan yang menempatkan dirinya sendiri
GoSpinnerControlmenunggu tanpa tahu kapan berakhirnya
GoBadgePanelContainertitik belum dibaca, tanda BARU, dan 99+

Formulir dan daftar

KelasBasisFungsinya
GoFieldVBoxContainerbaris yang bisa salah
GoInputGroupHBoxContainermasukan yang dilas ke tombolnya
GoComboboxButtonpemilih yang bisa mencari
GoCodeInputVBoxContainerkode kupon dan hadiah
GoTableVBoxContainerkepala kolom yang bisa diurutkan, baris yang bisa dipilih
GoPaginationHBoxContainerhalaman, atau baris Selengkapnya

Bentuk-bentuk yang benar-benar dipakai game

KelasBasisFungsinya
GoRewardCalendarVBoxContainerabsensi harian
GoRadar · GoDonutControlstatistik dalam sekali lihat
GoCarouselVBoxContainerbanner dan pemilihan karakter
GoKbdHBoxContainerpetunjuk tombol yang tidak berbohong

Di atas layar

KelasBasisFungsinya
GoDrawerCanvasLayerpanel samping
GoPopoverRefCountedkartu yang disematkan
GoContextMenuRefCountedtekan lama dan klik kanan
GoConsoleCanvasLayerkonsol pengembang

AI SKILL

gohud membawa AI skill: seluruh API, templat siap jalan, dan peluncur pratinjau. Tempelkan satu blok ke agen codingmu — ia memasang gohud dan tahu cara memakainya.

AI SKILL

Keterbacaan itu diukur, bukan dikira-kira

"Cantik" itu selera; "terbaca" itu bisa diukur. Teks abu-abu samar terlihat baik-baik saja di monitor bagus dan lenyap di ponsel saat siang bolong — memilih dengan mata telanjang menjamin hal itu cepat atau lambat terjadi.

python3 addons/gohud/tools/check_contrast.py

Setiap pasangan warna dan setiap label keadaan tombol di atas panel tempatnya berada diukur terhadap WCAG, pada keenam tema. Warna tembus pandang lebih dulu dikomposit di atas latar sesungguhnya — mengukurnya secara langsung akan melaporkan rasio yang lebih baik daripada yang tampak di layar.

Karena itu warna teks diturunkan, bukan dipilih: pembangun tema mengambil entri palet sebagai titik berangkat lalu mendorong terangnya sampai melewati ambang batas pada setiap permukaan yang mungkin ditempatinya. Ubah paletnya dan kontrasnya ikut menyesuaikan. Aturannya dan jebakan di baliknya →

Pemeriksaan, rilis, dan situs ini

Satu titik masuk menjalankan semua pemeriksaan; tiap bagian melihat sesuatu yang tak terlihat oleh yang lain.

bash addons/gohud/tools/check_all.sh
PemeriksaanApa yang ditangkapnya
run_tests.sh pada empat ukuran layarPerilaku dan tata letak widget, posisi RTL, fokus keyboard, kontras skin saat runtime, semua preset
new_project_check.shKetergantungan tersembunyi pada proyek induk; dengan --zip menguji rilis apa adanya, dengan --export sebuah build Web
check_contrast.pyKontras WCAG setiap berkas tema, termasuk keadaan tombol dan panel tembus pandang
check_generated.py · check_scaffold.shTema hasil generasi cocok dengan paletnya; tema sekali pakai berhasil dibangun dan lolos uji kontras
check_package.pyVersi yang diambil dari package.json, perpindahan changelog, dan isi ZIP, pada salinan sementara
check_site.pyTautan, jangkar, bahasa halaman, glosarium, dan tabel kenop situs ini
Jalan uji terakhir yang tercatat — 2026-09-13, Godot 4.7.2, macOS, renderer Compatibility. 438 dari 438 pemeriksaan pada 390×844, 844×390, 768×1024, dan 1280×800 di proyek kosong; 438 dari 438 lagi dengan autoload GoRuntime; satu ekspor Web; nol kegagalan kontras pada keenam tema. Godot 4.6 serta perangkat Android atau iOS sungguhan tidak termasuk dalam jalan uji ini.

Versi rilis

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

Versinya adalah yang tertulis di package.json — pengemasan tidak pernah menaikkannya. Untuk merilis versi baru, ubah dulu angka itu. Jalan yang berhasil menyamakan plugin.cfg dan GoUi.VERSION dengan nilai itu, dan saat versi itu dikemas pertama kali, memindahkan catatan Unreleased di CHANGELOG.md menjadi entri bertanggal. Mengemas versi yang sama lagi akan membangun ulang ZIP-nya dan menggantikan yang lama. Jalan yang gagal tidak mengubah apa pun. ZIP-nya tidak menyertakan situs web ini, berkas uji, tools, dan package.json.

Situs ini

python3 addons/gohud/tools/make_site.py            # glosarium dan tabel kenop skin, dibuat dari kode sumber
python3 addons/gohud/tools/check_site.py           # tautan, jangkar, bahasa, glosarium, tabel hasil generasi
bash addons/gohud/tools/site_shots.sh /tmp/shots   # tangkapan layar desktop dan ponsel untuk setiap halaman

Halaman-halamannya HTML biasa di dalam www/ — bahasa Inggris di akar, bahasa Korea di ko/. Sebuah workflow GitHub Actions menerbitkan folder itu sebagai akar situs.