Godot UI 控件开发指南
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/godot-ui-control-sh-dajs24。
技能介绍
要解决的问题
在 Godot 里做 UI,最常见的坑是拿 Node2D 拼 HUD 或菜单,结果按钮不继承主题、键盘和手柄焦点完全失效;另一个高频问题是窗口缩放后界面错位——靠手写像素坐标摆的位置,换个分辨率就全部跑偏。这个技能专门处理这两类问题:基于 Control 节点的响应式布局、统一的主题样式,以及手柄/键盘可导航的界面结构,面向 Godot 4.3+。
核心能力与工作流程
技能的核心工作流分六步:
- 用
Control而不是Node2D做 UI:Control自带矩形(位置+尺寸)、锚点系统,并参与焦点与主题继承,这是后续一切的基础。 - 锚点负责响应式:锚点是父矩形 0–1 的比例值,四边吸附到父级边缘。用编辑器的 Layout 预设(Top-Left、Full Rect、Center 等)代替手摆像素。
- 容器负责子节点定位:
VBoxContainer、HBoxContainer、GridContainer、MarginContainer等容器自动摆放子节点,通过size_flags控制伸缩;容器内的子节点不要再手动设锚点——会被覆盖。 - 主题统一样式:在顶层
Control上分配Theme资源,子节点自动继承;仅在必要时做单节点 theme override。 - 接好焦点导航:设置默认聚焦控件,定义焦点邻居或依赖 auto-neighbor,让手柄/键盘能在按钮间移动。
- 连接信号:
pressed、toggled、text_submitted、value_changed等事件接到游戏逻辑上。
适用边界与注意点
明确不适合的场景:世界中的 2D 节点(Node2D/精灵)属于场景搭建技能的范畴;UI 过渡动画交给 Tween(godot-animation);卡牌手牌等类型化界面另有模板。此外有几个高频坑要避开:
- 别在容器里手动摆位置——容器会覆盖子节点的锚点,需要自由摆放就脱离容器,或用普通
Control/PanelContainer包裹。 - 锚点与偏移是两回事:锚点是父级比例,偏移是像素增量;只设
position而锚点停在 0,界面不会随窗口缩放。 - 手柄无焦点则方向输入无效——记得调用
grab_focus()并确认focus_mode不是FOCUS_NONE。 - Godot 3 的属性名已改名:
rect_size/rect_position/rect_min_size在 4.x 中变为size/position/custom_minimum_size。 - 全矩形装饰面板要设
MOUSE_FILTER_IGNORE,否则会吞掉下层节点的点击。
锚点/偏移的数学、各种容器类型、Theme 与 StyleBox 的构建扩展、焦点邻居接线等细节,技能的 references/layout-and-theming.md 中有完整参考。
使用场景
- 做游戏 HUD 时窗口拉大血条跑偏,用 Control 锚点和 Layout 预设搭随窗口缩放的界面
- 手柄游戏里做设置菜单,摇杆切选项失灵,接好焦点导航和 grab_focus() 让手柄键盘都能走
- 背包界面物品槽一堆,用 GridContainer 自动排布加 MarginContainer 控边距,不手写坐标
- 给整套 UI 换配色和字体,只在最外层挂一个 Theme 资源,子节点自动继承不逐个改
适合人员
- 独立游戏开发者:一人包办程序和美术,要在 Godot 里快速搭出随分辨率缩放不散架的 HUD 与菜单
- 小团队 UI 程序员:负责游戏全部界面布局,想用对锚点和容器体系,避免每次改窗口尺寸都手动调坐标
- 手柄游戏移植者:作品要上主机,需确保手柄方向输入在菜单里正常切焦点,不依赖鼠标键盘
- 从其他引擎转来的 Godot 初学者:想弄清 Control 与 Node2D 的区别,知道何时该用容器而非自由摆放