Godot UI布局指南
UI 布局主要依赖 Control 节点体系 + 容器(Container)+ 锚点(Anchor)
布局组件
Container(自动布局的关键)
| 容器 | 用途 |
|---|---|
HBoxContainer |
横向排列 |
VBoxContainer |
纵向排列 |
GridContainer |
网格 |
MarginContainer |
内边距 |
CenterContainer |
居中 |
PanelContainer |
带背景 |
| ... | 其它 |

Container 组件结合组件设置,控制设置的方位(上,下,左,右,居中),设置是收缩还是撑满容器。
锚点(Anchor)定位布局
在 Godot 中,非常核心的规则:“父节点的属性决定了子节点的行为。”
简单一句话总结:如果父节点是容器(Container),子节点的锚点(Anchors)就会失效。
可以使用进行定位布局,可直接使用锚点预设,也可以自定义:

在使用自定义时:
Anchors Points(锚点):百分比定位
锚点的值通常在 $0.0$ 到 $1.0$ 之间。它定义了节点四个边缘(左、上、右、下)相对于父级容器尺寸的比例。
- 0.0: 父级的最左侧或最顶端。
- 0.5: 父级的正中间。
- 1.0: 父级的最右侧或最底端。
Anchors Offsets(偏移):像素微调
偏移量是基于锚点位置的像素加减。
- 如果
Anchor Left是 $0.5$(中心),而Offset Left是 $20$:- 那么该节点的左边界将位于:父容器中心点 + 20 像素的位置。
- 如果
Anchor Right是 $1$(最右),而Offset Right是 $-50$:- 那么该节点的右边界将位于:距离父容器最右侧缩进 50 像素的位置。
内容组件
基础 UI 内容控件
文本类
| 节点 | 说明 |
|---|---|
| Label | 显示静态文本 |
| RichTextLabel | 富文本(颜色、图片、BBCode) |
| LineEdit | 单行文本输入 |
| TextEdit | 多行文本输入 |
按钮类
| 节点 | 说明 |
|---|---|
| Button | 普通按钮 |
| CheckBox | 复选框 |
| CheckButton | 开关式按钮 |
| OptionButton | 下拉选择框 |
| MenuButton | 带弹出菜单的按钮 |
| LinkButton | 超链接样式按钮 |
图像 / 显示类
| 节点 | 说明 |
|---|---|
| TextureRect | 显示图片 |
| NinePatchRect | 九宫格拉伸背景 |
| ColorRect | 纯色矩形(遮罩、背景) |
| VideoStreamPlayer | 播放视频(UI 中可用) |
进度 / 数值显示控件
常用于:血条、加载条、音量调节
| 节点 | 说明 |
|---|---|
| ProgressBar | 进度条 |
| TextureProgressBar | 自定义贴图进度条 |
| SpinBox | 数值输入(带加减) |
| HSlider / VSlider | 滑动条 |
| HScrollBar / VScrollBar | 滚动条 |
窗口 / 面板类
| 节点 | 说明 |
|---|---|
| Panel | 普通面板 |
| Window | 独立窗口(Godot 4 新强化) |
| Popup | 弹出窗口基类 |
| PopupPanel | 面板弹窗 |
| AcceptDialog | 确认弹窗 |
| ConfirmationDialog | 确认/取消弹窗 |
| FileDialog | 文件选择 |
| ColorPicker / ColorPickerButton | 颜色选择器 |
Panel = 有背景、有边框、可被 Theme 控制的 UI 容器/背景控件
常见用途:设置面板,弹窗底板,HUD 背景,卡片
Panel 会使用 Theme 中的 StyleBoxTexture 来绘制背景和边框:
- 背景色 / 背景贴图
- 边框宽度、颜色、圆角
- 可统一由 Theme 控制
- 不会自动排列子节点,不会处理间距、对齐
- 可在其内添加布局容器节点进行布局处理,或者使用
PanelContainer
可以在统一在主题中设置新的Panel类型进行类样式设置,也可直接在面板中的“主题覆盖” 使用新的“StyleBoxTexture” 来设置“AtlasTexture”, 设置“AtlasTexture” 在 “Sub-Region”编辑子区域即可。
关于Panel的大小,Panel 只有在“有尺寸(rect)”时才会绘制背景,Panel 不会自己产生尺寸,所以就只有两条路:
1️⃣ 被父容器撑开(推荐)
2️⃣ 你手动给它一个大小
列表 / 数据展示类
| 节点 | 说明 |
|---|---|
| ItemList | 简单列表 |
| Tree | 树形结构 |
| TabBar | 标签栏 |
| OptionButton | 轻量下拉列表 |
交互 & 辅助控件
| 节点 | 说明 |
|---|---|
| TooltipLabel | 提示信息 |
| TextureButton | 使用贴图的按钮 |
| TouchScreenButton | 触屏按钮 |
| Control | 所有 UI 的基类 |
| CanvasLayer | UI 层级管理(HUD 常用) |
容器大小
Godot 的 UI(Control / Container)容器的大小一般来说只可能来自这三种来源之一:
1️⃣ 父节点给它分配的空间(最常见)
2️⃣ 自身的 anchors / offsets(手动或预设)
3️⃣ Container 根据规则“计算并分配”子节点大小(反向是少数特例)
在 Godot UI 中:
🔽 父 → 子:可以控制大小
🔼 子 → 父:几乎不影响大小
这是和 Web(HTML)思维完全不同的地方。
容器分情况
size = (0, 0)的容器
普通 Control(包括 Panel),若不设置大小则:
- 默认
size = (0, 0) - 不会因为子节点存在而变大
- 不会继承父节点 size
👉 结果:
- Button 能显示(它自己有 size)
- Panel 背景看不到(size 为 0)
✅ Control / Panel = 必须被撑开或手动设大小
Container(VBox / HBox / Grid 等)
Container 的核心规则
Container 自己的大小:来自父节点
Container 只负责:给子节点分配大小
唯一的“子 → 父”影响(例外)
🔹 Minimum Size(最小尺寸)
有些 Control 会提供 最小尺寸建议:
- Label(文字尺寸)
- Button(文本 + padding)
- TextureRect(图片大小)
- Panel
只有在以下情况下才生效:
- 父节点是 Container
- 父节点在计算布局时参考
min_size
⚠️ 但依然不会反向改变父 Container 的 size

浙公网安备 33010602011771号