gohud

Ігровий інтерфейс, яким керує один ресурс

gohud — це набір HUD та UI для Godot 4.6 і новіших. Плаваючі вікна, нижні аркуші, діалоги, форми, снекбари, коуч-мітки, смуги HUD, швидкі слоти та віртуальний стик працюють від однієї теми й одного змінного набору іконок і самі дають раду безпечній зоні, віртуальній клавіатурі, RTL і областям дотику. Шість пресетів — стандартний, сай-фай і середньовічний, кожен у темному та світлому варіанті — міняють кольори й форми одним рядком.

Godot 4.6+ v1.0.1 Чистий GDScript Без автозавантаження MIT 6 пресетів 21 мова 100 іконок у комплекті

Який вигляд це має у грі

Середньовічний і сай-фай пресети — картка персонажа, інвентар і завдання; форми, сітки та картки-запити; кутасті панелі й сенсорне керування. Пресет перемикається одним рядком коду.

Середньовічна тема gohud — картка персонажа зі смугами здоров'я, мани та витривалості, торба швидких слотів і журнал завдань у кованих золотих рамах
Середньовіччя — персонаж, інвентар і завдання
Середньовічна тема gohud — панель вводу з полем імені, перемикачем, прапорцями й повзунком гучності, сітка плиток і картка-запит про вступ до загону з кнопками «Прийняти» та «Відхилити»
Середньовіччя — форми, сітки та картки-запити
Сай-фай тема gohud — панель сенсорного керування зі зрізаними кутами, шестикутним стиком, перемикачем «Фіксований / Слідом / Відносний» і круглими кнопками дій
Сай-фай — кутасті панелі й сенсорне керування

Усі шість пресетів і як їх перемикати →

Що він знімає з ваших плечей

Найбільше часу в ігровому інтерфейсі з'їдає не форма кнопки — а все те, що розповзається між пристроями. gohud тримає це розповзання в одному місці.

Кожен розмір — це токен

Відступи, кути й розміри тексту звуться на ім'я, а не пишуться числами. Змініть тему — і весь екран рушить разом із нею.

Видимий розмір ≠ розмір натискання

Кнопка закриття виглядає на 36dp, але її область дотику — 48dp. Там, де тісні слоти перекриваються, натискання дістається тому, чий центр ближче.

Вирізи й клавіатури

Частини HUD сидять усередині безпечної зони, а поле вводу підіймається над віртуальною клавіатурою, коли та з'являється.

«Назад» закриває одне

Escape і апаратна кнопка «Назад» на Android закривають лише найверхнішу поверхню. Складені одне на одному вікна не зникають разом.

Сповіщення не крадуть ввід

Натисніть крізь снекбар — і кнопка під ним отримає натискання. Фокус теж не забирається.

Іконки запитують на ім'я

Віджети знають лише GoIconSet.CLOSE. Замініть набір — і всі малюнки зміняться, не чіпаючи жодного рядка коду.

Шість образів, один рядок

GoUi.use_preset() міняє тему, скін та іконки разом — заокруглені, зрізані сай-фай чи ковані середньовічні рами.

Розбірливість — виміряна

Кожна тема перевіряється за WCAG, разом зі станами кнопок і напівпрозорими панелями HUD над чисто білим і чисто чорним тлом.

Усе працює й без увімкнення плагіна. Увімкнення додає автозавантаження GoRuntime, яке стежить за розміром вікна, масштабом dp і висотою клавіатури, а також параметри проєкту для ресурсу налаштувань і пресету — це зручності, а не вимоги.

Встановлення gohud

Два шляхи. Доручіть ШІ-агенту або покладіть теку у свій проєкт — більше нічого налаштовувати.

Встановлення

Швидкий старт

П'ять рядків виводять екран з темою. Повний шлях — на сторінці встановлення.

Швидкий старт

Змініть образ — кольори і форму

Тема може перестилізувати лише те, що малює рушій. Заокруглені кути — єдині, які має StyleBoxFlat, а стик, швидкі слоти й коуч-мітка малюються кодом, тож самою лише темою їхню форму не змінити ніколи. Тому gohud постачає пресети: тема, скін і набір іконок, вибрані як одне ціле.

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)   # тема, скін та іконки разом
ПресетОбраз
default_darkПервісний gohud — заокруглені кути, м'який синій акцент
default_lightТі самі форми на світлій палітрі
scifi_darkЗрізані кути, блакитні неонові краї та сяйво, шестикутний стик, прицільні дужки
scifi_lightТі самі кутасті форми в яскравій «кресленицькій» палітрі
medieval_darkТемне залізо й шкіра, рами під старе золото, заклепки, гравійовані іконки, заголовки шрифтом Cinzel
medieval_lightПергамент, чорнило й бронза з тими самими кованими рамами
Галерея gohud із пресетом default_dark — заокруглені кути, синій акцент
default_dark — заокруглені кути, м'який синій акцент
Пресет default_light — ті самі форми на світлій палітрі
default_light — ті самі форми, світла палітра
Пресет scifi_dark — зрізані кути й блакитний неон
scifi_dark — зрізані кути, блакитний неон
Пресет scifi_light — ті самі кутасті форми в «кресленицькій» палітрі
scifi_light — ті самі кутасті форми, «кресленицька» палітра

Ці чотири — той самий екран галереї. Не різниться жодного рядка коду — лише назва пресету. Кути кнопок, форми перемикачів, рядки списків і рамки полів вводу рухаються разом.

Середньовічна колекція

medieval_dark поєднує залізо та шкіру зі старим золотом; medieval_light бере пергамент і чорнило. Рами меню несуть заклепку й невелику кутову оздобу, тоді як завжди видимий HUD лишається стриманим; 16 гравійованих іконок перемальовують назви предметів, а вбудований шрифт Cinzel вживається лише в заголовках і підзаголовках.

medieval_dark — картка персонажа, торба швидких слотів і журнал завдань
medieval_dark — залізо та шкіра
medieval_light — ті самі екрани персонажа, торби та завдань на пергаменті
medieval_light — пергамент і чорнило

Обидва знімки — це examples/medieval/medieval.tscn, зібраний зі стандартних віджетів. Середньовічний посібник і як зробити власне королівство →

Той самий екран на телефоні й на комп'ютері

Знімки галереї — це телефон у портреті. Нижче — той самий код на 1280×800: вміст спиняється на зручній для читання ширині (480dp) і центрується, а HUD лишається по кутках. Форма обходить плаваючі частини HUD, але не рухається, якщо вже стоїть осторонь них: штовхати її попри це означало б зсунути вміст із центру на широкому екрані.

default_dark на 1280x800 — вміст по центру, HUD по кутках
default_dark · 1280×800
scifi_dark на 1280x800 — те саме компонування зі зрізаними панелями й неоном
scifi_dark · 1280×800

Той самий аркуш, інший образ

Нижній аркуш у default_dark
Стандартний — заокруглена картка, липкий рядок пошуку та підвал
Нижній аркуш у scifi_dark — неоновий акцентний край згори
Сай-фай — акцентний край згори, зрізані кути, сяйво

Виберіть один у Параметрах проєкту → gohud → Theme → Preset або задайте GoConfig.preset. Явно заповнені theme, skin чи icons переважають над пресетом, тож можна взяти пресет і перевизначити лише одне з них.

Нова тема — це один файл JSON. new_theme.py kingdom --from medieval_dark пише палітру, у якій розписано кожне успадковане значення; make_theme.py kingdom збирає тему, її графіку для контролів і регулятори скіна, і пресет з'являється у списку вибору. Кожен параметр і регулятор →

Скіни — там, куди темі не дістатися

Скіну належать стик, лицьові боки швидких слотів, кільце коуч-мітки, чипи, скелетони, сповіщення, роздільники та заголовки секцій. Успадкуйте його й перевизначте лише те, що хочете змінити.

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
КласЯкі форми вміє
GoStyleBoxCutКути, зрізані по діагоналі (фаска), один потовщений акцентний край, зовнішнє сяйво
GoStyleBoxBracketЛише кутові позначки, без обрамлення вмісту
GoStyleBoxMedievalКована рама із заклепками, кутовим гравіюванням, фаскою-відблиском і зернистістю матеріалу

Усі три серіалізуються в ресурс Theme — саме це й дозволяє темі міняти форму, а не лише колір. GoSkinSciFi і GoSkinMedieval — вбудовані підкласи.

GoStyle.box() завжди повертає StyleBoxFlat, бо код, який його викликає, отримує результат і правит bg_color чи corner_radius. Коли власна форма мусить вціліти, користуйтеся GoStyle.surface().

Віджети

Усі складники в одній таблиці. Кожен докладно →

КласОсноваЩо робить
GoSurfaceControlОболонка плаваючої картки — розміщення по центру, знизу чи біля прив'язки, липкі заголовок і підвал, тіло з прокруткою, зміна розміру перетягуванням
GoSheetCanvasLayerСторінки, що підіймаються знизу, на власному шарі — тож сидять над HUD
GoDialogsNodeПідтвердження та сповіщення, на які ви робите await; destructive — для незворотних дій
GoFormMarginContainerФорми з обмеженою шириною, що обходять віртуальну клавіатуру, а з avoid_hud — і HUD
GoScrollScrollContainerСенсорна прокрутка; смуга прокрутки ховається в поля картки
GoNoticePanelContainerСнекбар, що не бере ні вводу, ні фокуса
GoPromptCardPanelContainerЗапитання, яке не блокує гру
GoCoachMarkControlНавчальний тур, що вказує на справжні контроли; натискання на ціль веде далі
GoHudAnchorControlПрикріплює частини HUD до одного з дев'яти місць у безпечній зоні
GoBarControlСмуги здоров'я, мани та досвіду з плавними змінами
GoSlotButtonШвидкий слот — іконка, кількість, відкат і гаряча клавіша на одному лицьовому боці
GoJoystickControlВіртуальний стик у фіксованому, слідуючому чи відносному режимі
GoIconButtonButtonВиглядає малою, натискається великою
GoStylestaticКнопки, рядки списків, поля вводу, чипи, таблиці, вкладки та інше — зроблені одним послідовним способом

Очікування, сповіщення, лічильники

КласОсноваЩо робить
GoSnackbarNodeповідомлення, яке саме себе розміщує
GoSpinnerControlочікування, кінця якому не видно
GoBadgePanelContainerкрапка непрочитаного, позначка «НОВЕ», оте 99+

Форми та списки

КласОсноваЩо робить
GoFieldVBoxContainerрядок, який може бути хибним
GoInputGroupHBoxContainerполе вводу, приварене до своєї кнопки
GoComboboxButtonвибирач, який шукає
GoCodeInputVBoxContainerкупони та подарункові коди
GoTableVBoxContainerзаголовки для сортування, рядки для вибору
GoPaginationHBoxContainerсторінки або рядок «Ще»

Форми, якими ігри справді користуються

КласОсноваЩо робить
GoRewardCalendarVBoxContainerщоденна відвідуваність
GoRadar · GoDonutControlхарактеристики з одного погляду
GoCarouselVBoxContainerбанери та вибір персонажа
GoKbdHBoxContainerпідказки клавіш, які не брешуть

Поверх екрана

КласОсноваЩо робить
GoDrawerCanvasLayerбічна панель
GoPopoverRefCountedприколена картка
GoContextMenuRefCountedдовге натискання та клац правою
GoConsoleCanvasLayerконсоль розробника

AI SKILL

gohud має ШІ-навичку: увесь API, готові до запуску шаблони та запуск попереднього перегляду. Вставте один блок у свого агента — він встановить gohud і знатиме, як ним користуватися.

AI SKILL

Розбірливість вимірюють, а не оцінюють на око

«Гарно» — справа смаку; «розбірливо» можна виміряти. Блідий сірий текст чудово виглядає на доброму моніторі й зникає на телефоні серед білого дня — вибір на око рано чи пізно це гарантує.

python3 addons/gohud/tools/check_contrast.py

Кожна пара кольорів і напис кожного стану кнопки над панеллю, на якій він лежить, вимірюються за WCAG в усіх шести темах. Напівпрозорі кольори спершу накладаються на своє справжнє тло — виміряні напряму, вони показують кращий коефіцієнт, ніж видно на екрані.

Тому кольори тексту виводяться, а не вибираються: конструктор бере запис палітри за відправну точку й піднімає його світлість, доки той не перевищить поріг на кожній поверхні, куди може лягти. Змініть палітру — і контраст рушить услід. Правила й пастки за ними →

Перевірки, релізи й цей сайт

Одна точка входу запускає всі перевірки; кожна частина бачить те, чого не бачать інші.

bash addons/gohud/tools/check_all.sh
ПеревіркаЩо ловить
run_tests.sh на чотирьох розмірах екранаПоведінку та компонування віджетів, позиції в RTL, фокус із клавіатури, контраст скіна під час виконання, кожен пресет
new_project_check.shПриховані залежності від проєкту-господаря; з --zip — реліз у тому вигляді, в якому він постачається, з --export — вебзбірку
check_contrast.pyКонтраст за WCAG у кожному файлі теми, разом зі станами кнопок і напівпрозорими панелями
check_generated.py · check_scaffold.shЩо згенеровані теми відповідають своїм палітрам; що одноразова тема збирається й проходить перевірку контрасту
check_package.pyВерсія з package.json, перенесення записів журналу змін і вміст ZIP — у тимчасових копіях
check_site.pyПосилання, якорі, мову сторінок, глосарій і таблиці регуляторів цього сайту
Останній записаний прогін — 2026-09-13, Godot 4.7.2, macOS, рендерер Compatibility. 438 із 438 перевірок на 390×844, 844×390, 768×1024 і 1280×800 у порожньому проєкті; знову 438 із 438 з автозавантаженням GoRuntime; вебекспорт; жодного провалу за контрастом у всіх шести темах. Godot 4.6 та фізичні пристрої на Android чи iOS у цей прогін не входили.

Версії релізів

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

Версія — та, що записана в package.json: пакування ніколи її не підвищує. Щоб випустити нову версію, спершу змініть це число. Успішний прогін виставляє це значення в plugin.cfg і GoUi.VERSION, а під час першого пакування цієї версії переносить нотатки з розділу Unreleased у CHANGELOG.md у датований запис. Повторне пакування тієї самої версії наново збирає її ZIP і замінює попередній. Невдалий прогін не змінює нічого. До ZIP не потрапляють ні цей сайт, ні тести, ні інструменти, ні package.json.

Цей сайт

python3 addons/gohud/tools/make_site.py            # глосарій і таблиці регуляторів скіна, згенеровані з коду
python3 addons/gohud/tools/check_site.py           # посилання, якорі, мова, глосарій, згенеровані таблиці
bash addons/gohud/tools/site_shots.sh /tmp/shots   # знімки кожної сторінки на комп'ютері й на телефоні

Сторінки — це звичайний HTML у www/: англійська в корені, корейська в ko/. Робочий процес GitHub Actions публікує цю теку як корінь сайту.