← К блогу

Godot 4 HUD и Theme: передача Control-дерева и приёмка в Play

Приёмка Theme, StyleBox, якорей контейнеров и minimum_size, когда Figma попадает в Godot 4. Аналог чек-листа Unity UGUI: шесть шагов Play и маршрутизация правок.

Опубликовано
  • game-ui-design
  • game-dev-ai
  • ui-to-engine
  • godot
  • theme
  • hud
  • figma-to-godot
  • vberai
  • 2026
Godot 4 HUD и Theme: передача Control-дерева и приёмка в Play

Godot 4 HUD не готов, когда PNG просто лежат на узлах TextureRect: StyleBox в Theme, шрифты по умолчанию, цепочка контейнеров (MarginContainer → HBoxContainer / VBoxContainer) и якоря / offsets вместе решают, удержится ли раскладка на разных разрешениях. Auto Layout из Figma может выглядеть идеально, но в Play всё ещё будут уползающие нижние панели, кнопки с нулевым минимумом или обрезанный длинный текст — обычно потому, что Control-дерево или ресурс Theme не совпали со спецификацией передачи.

Ниже речь о Godot 4.x Control + Theme. Команды Unity могут применить ту же планку через чек-лист движка + MCP. Полный поток Figma → Godot: Figma в Godot (VberAI Studio экспортирует Control-дерево). Этот пост охватывает только оболочку HUD: Theme, именование узлов, дымовой тест в Play — не шаги установки MCP.

Критерии провала (любой один = не пройдено): в основном HUD читаемые элементы управления обрезаны при целевом соотношении сторон (включая эквивалент Safe Area — DisplayServer.get_display_safe_area()); у одной и той же кнопки размер в редакторе и в экспортированной сборке не совпадает без письменной спецификации; состояния кнопок в Theme (normal / hover / pressed / disabled и т. д.) отсутствуют, но всё равно выпускаются; дерево сцены изменено только для одной локали (конфликтует с i18n одинаковой структуры — см. переполнение локалей); minimum_size не задан, поэтому фон панели с nine-slice выглядит нормально, но текст прилипает к краям.


Theme и узлы: что должна согласовать передача

Дизайн-поставкаПриземление в Godot
Цвет / радиус / панели с рамкойStyleBoxFlat / StyleBoxTexture в Theme (patch margins по nine-slice)
Размеры основного / заголовочного текстаfont_size по умолчанию в Theme + вариации типа Label при необходимости
Состояния кнопокЧетыре набора StyleBox на Button: normal / hover / pressed / disabled
Иконка + текстИконка TextureRect с фиксированным минимумом; текст Label в растягиваемом контейнере
Корень полноэкранного HUDПресет якоря корневого Control + MarginContainer для safe area

Именование: имена узлов сцены совпадают с семантикой компонентов Figma (HUD_BottomBar, Btn_Shop), чтобы пути MCP / скриптов $ оставались стабильными (чек-лист движка + MCP).


Порядок приёмки в Play (6 шагов)

1. Зафиксировать viewport и safe area

  • Задайте целевую базовую ширину/высоту в Project Settings → Display (командное соглашение для портрета).
  • Отступите корень HUD через DisplayServer.get_display_safe_area() или узел SafeArea в Godot 4.2+; проверьте на одном высоком телефоне (см. пост про Safe Area).

2. Theme как единственный источник истины

  • Поддерево HUD наследует один ресурс Theme, а не ручные переопределения на каждой кнопке.
  • Любые узлы с переопределениями должны быть перечислены в спецификации, иначе рескин их пропустит.

3. Цепочка контейнеров и флаги размера

ПроверкаЧастая ошибка
size_flags_horizontal / verticalУ Label, который должен расти, нет Fill/Expand → обрезка локали
custom_minimum_sizeВысота кнопки 0 → цель касания слишком мала
Вложенный MarginContainerДвойные отступы → лишнее пустое кольцо

4. Дымовой тест локалей

  • В Localization переключите стресс-языки (DE/ES и т. д.) и язык выпуска; меняйте только текст tr(), не дерево узлов.
  • Переполнение → путь переполнения локалей (мин. ширина / текст / повторный экспорт).

5. Состояния и фокус

  • Фокус клавиатуры/геймпада (если поддерживается): StyleBox focus, заданный в Theme.
  • Отключённые кнопки всё ещё перехватывают клики (mouse_filter, состояние disabled).

6. Повторный тест экспортированной сборки

  • Запустите основной HUD 30 секунд в Debug и Release; если fallback шрифта меняет ширину, повторите тест на устройстве (пункт 5 предрелизного чек-листа Dev/Release; все локали — пункт 2).

Приблизительное сопоставление с Figma Auto Layout

FigmaGodot 4
Вертикальный Auto LayoutVBoxContainer + separation
Горизонтальный Auto LayoutHBoxContainer
PaddingMarginContainer или content margin в StyleBox
Fill containersize_flags Expand + Fill
Hug contentsДочерние без Expand; родитель обжимает

Если VberAI Studio (или ваш пайплайн) уже экспортировал контейнеры, принимайте в Play — не оценивайте только статичные кадры в редакторе.


Маршрутизация правок

СимптомВероятная причинаДействиеВладелец
Нижняя панель под вырезомНет safe insetОтступ корня + API safe areaИнж.
Одна локаль переполняетсяМин. ширина / размер шрифтаМинимум Theme или контейнера; сократить текст локалиДизайн + инж.
Стили неверны после рескинаПереопределения разбросаныКонсолидировать Theme; повторный экспортИнж. + дизайн
Шов nine-slice в StyleBoxНеверный patch marginСовместить с px дизайна; см. пост про nine-sliceИнж. + дизайн
MCP не может привязать узлыИмена ≠ экспортУнифицировать именование; повторно экспортировать Scene/PackedSceneИнж.

FAQ

Один Theme на экран или один на всю игру?
Частый паттерн: глобальный Theme + редкий theme_override; скины событий через замену Theme при рескине, а не ручную правку тона на каждом узле.

Смешивать Control с ручной раскладкой CanvasItem?
Держите 2D HUD на одном Control-дереве; не смешивайте с вручную расставленными координатами CanvasLayer в одном HUD.

Нужен отдельный стиль фокуса для клавиатуры/геймпада?
Если проект поддерживает фокус клавиатуры/геймпада, задайте StyleBox focus на Button, LineEdit и т. д. в Theme (или видимый theme_override) и проверьте Tab/d-pad в Play. HUD только для касаний может указать в спецификации стиль фокуса не требуется, чтобы QA и инженеры делили одну планку.

Чем это отличается от приёмки Prefab в Unity?
Та же планка (обрезка, локали, состояния, Release); замените имена на StyleBox / size_flags / PackedScene.

Обязательно ли использовать Figma?
Нет. Без Figma вам всё равно нужна спецификация Theme + контейнеров; с Figma — чек-лист передачи дизайна, затем Godot.

Другие статьи, которые могут вам понравиться

Дизайн игрового UI: традиционный процесс против AI-арта + разделение в VberAI Studio

Сравнение ручной нарезки в PS/Figma и VberAI Studio: импорт или AI-генерация UI, авторазделение слоёв, экспорт слоёного PSD или наборов изображений. Эффекты, шаги и демо-видео.

  • game-ui-design
  • game-ui-designer-flow
  • ui-slicing
  • AIGC
Читать