Week4 — UMG 界面系统¶
主要介绍UMG界面。
UMG简介¶
UMG是Unreal Motion Graphics的缩写,是UE4中的一种用于创建用户界面的工具。UMG是基于Slate框架的,Slate是UE4中的一种用于创建用户界面的工具,UMG是Slate的一个高级封装。
UMG vs Slate
Slate 是 UE 底层的 UI 框架,完全用 C++ 构建,功能强大但编写繁琐。UMG 在 Slate 之上封装了一层蓝图友好的可视化编辑器,适合快速搭建界面。绝大多数项目使用 UMG 即可,只有需要深度自定义渲染逻辑时才直接操作 Slate。
Widget Blueprint 创建流程¶
创建一个 UMG 界面的标准步骤:
- Content Browser 右键 → User Interface → Widget Blueprint
- 选择父类(默认
UserWidget,也可指定自定义 C++ 基类) - 在 Designer 面板中拖拽控件、设置锚点和布局
- 在 Graph 面板中编写交互逻辑
- 在 GameMode 或 PlayerController 中通过
CreateWidget实例化并AddToViewport
| C++ | |
|---|---|
Widget 生命周期
Widget 的关键事件按顺序为:PreConstruct(设计器预览)→ Construct(实例化时)→ Initialize(初始化绑定)。一般将数据绑定和初始化逻辑放在 Initialize 中。
UMG编辑器¶
UMG编辑器界面主要组成:
- Palette:用于选择控件的面板
- Hierarchy:显示控件的层级关系
- Details:显示控件的属性,可以修改控件的属性或者事件
- Graph:显示控件的事件
- Viewport:显示控件的预览
- Animation:显示控件的动画
常用控件¶
| 控件 | 用途 |
|---|---|
| TextBlock | 静态/动态文本显示,支持富文本格式 |
| EditableText | 单行文本输入 |
| MultiLineEditableText | 多行文本输入 |
| RichTextBlock | 支持内联样式标签的富文本 |
| 控件 | 用途 |
|---|---|
| Button | 可点击按钮,绑定 OnClicked 事件 |
| CheckBox | 复选框,支持 Checked/Unchecked/Undetermined |
| ComboBox | 下拉选择框 |
| Slider | 滑动条,输出浮点值 |
| 控件 | 用途 |
|---|---|
| Image | 显示纹理或材质 |
| ProgressBar | 进度条,绑定百分比 |
| WidgetSwitcher | 在多个子 Widget 之间切换显示 |
| ScrollBox | 可滚动的内容区域 |
| ListView | 虚拟化列表,适合大数据量 |
布局容器¶
UMG 的布局系统依赖 容器(Panel Widget) 来组织子控件:
- Canvas Panel:默认容器,使用锚点(Anchor)+ 偏移量进行绝对/相对定位
- Horizontal Box:水平排列子控件,支持 Slot 的 Fill/Size 属性控制比例
- Vertical Box:垂直排列子控件,用法同 Horizontal Box
- Overlay:子控件层叠显示,后添加的在上层
- Grid Panel:网格布局,指定行列放置子控件
- Size Box:约束子控件的最小/最大尺寸
- Scale Box:自动缩放子控件以适应可用空间
锚点适配
不同分辨率下 UI 的适配依赖 Anchor(锚点) 设置。常见模式:
- 全屏拉伸:四个锚点分别指向四个角(适合背景图)
- 固定角落:锚点设为左上/右下等角落(适合 HUD 小地图)
- 居中:锚点设为 (0.5, 0.5)(适合弹窗/对话框)
UMG蓝图制作要点¶
- 元素展现:通过图片文字等元素展现UI
- 交互体验:使用按钮滑动条输入框等控件实现交互
- 布局调整和适配:使用布局控件和锚点实现UI的适配,如使用四向拉伸的锚点实现UI的适配
- 功能实现:使用蓝图实现UI的功能,如preconstruct、construct、oninitilize等事件
还可以通过代码的方式实现UI的逻辑,创建一个继承自UserWidget的C++类,然后在UMG中把Class Citing设置为这个类,此时父类的事件会自动绑定到UMG中。
设计完UI后,在GameMode中设置UI的显示,使用CreateWidget函数创建UI,使用AddToViewport函数将UI添加到视口中。
刷新函数绑定:使用BindWidget函数绑定UI中的控件,然后在蓝图中调用刷新函数;为了主动刷新,可以在蓝图中调用函数,然后在函数中刷新UI。
UI 输入模式¶
在显示 UI 时需要注意 输入模式 的切换:
常用模式
FInputModeUIOnly:纯 UI 模式,游戏不接收输入FInputModeGameOnly:纯游戏模式,UI 不接收输入FInputModeGameAndUI:混合模式,适合暂停菜单等场景