游戏布局系统概述 🎮
1️⃣ 概述
一个游戏可以有多个玩家一起玩,每个玩家有一个属于自己的画面(UI布局)展示所有的UI内容。
每一个布局中会有多个层次的内容在不同的情况下展示/隐藏/相互覆盖。
而布局系统则是为了方便地管理这些内容。
2️⃣ 准备你的游戏布局
定位到 ProjectSettings -> Game -> Generic UI System Settings
,在这里选择你的UI策略。

游戏UI策略只是一个简单的蓝图,用于引用具体的游戏布局Widget。
你可以新建一个蓝图,继承自 GUIS_GameUIPolicy
来创建新的策略。

3️⃣ 布局内容
以 WB_GUI_GameUILayout
为例,它只是一个空的,继承自 GUIS_GameUILayout
的 Widget 蓝图。

其中,该布局设置了四个 CommonActivatableWidgetStack
用于表示不同的UI层,越往下的UI层拥有越高的显示优先级。
Stack | UI层标记 | 描述 |
GameLayer_Stack | GGF.UI.Layer.Game | 一般游戏的HUD内容会显示在这一层。 |
GameMenu_Stack | GGF.UI.Layer.GameMenu | 与游戏相关的“菜单”,例如游戏内的库存界面。 |
Menu_Stack | GGF.UI.Layer.Menu | 类似于设置屏幕、系统设置的内容。 |
Modal_Stack | GGF.UI.Layer.Model | 确认对话框、错误对话框等。 |
并在 EventGraph
中通过如下代码将每一个UI层与不同的游戏标签关联起来。

每一个UI层本质上是一个 ActivatableWidgetStack
,你可以将任何 Widget 添加(Push)和移除(Pop/Deactivate)到不同的UI层。例如,将新的 Widget 添加到 GameMenu
层时,该层原有的 Widget 会停止显示,并显示新的用户界面,直到新的用户界面被移除。
如果将新的 Widget 放入完全不同的层,如 Menu
层,该Widget则会覆盖在 Game
和 GameMenu
层。因为每一个UI层都是单独的 WidgetStack。
此游戏UI布局,基本上能涵盖大多数游戏的需求。如果你的游戏有特殊的需求,你完全可以参考此布局,构建属于你自己的独一无二的游戏布局,并使用你自己的层标记。
4️⃣ 为玩家初始化UI布局
在 UnrealEngine 中,无论是多人模式还是本地分屏模式,每一个 PlayerController/LocalPlayer
都在本机拥有属于自己的 AHUD
对象用于展示UI。因此,HUD 是一个初始化玩家UI的最佳切入点。
每一个玩家都有自己的UI,有自己的布局,因为我们需要在每个玩家的HUD中,请求UI子系统为自己创建UI布局。

这样每一个玩家进入游戏后,就会自动将配置好的布局加入到视口。
5️⃣ 操纵UI层
当UI布局被添加到玩家视口后,你就可以使用如下API往不同的UI层添加不同的内容了。

比如你有一个Widget用于展示HUD元素,你就可以将其添加到 Layer.Game
对应的UI层。

要从UI层移除Widget,一般是在Widget内部操作。

用这几个简单的API,你可以操纵很复杂的UI层级,比如:
- HUD
- 暂停菜单
- 设置菜单
- 游戏设置
- 操纵设置
⚠️ 注意:能被推送到的UI层的Widget必须继承自 CommonActivatableWidget
。
6️⃣ UI策略的用途
UI策略主要用于确定游戏的布局,并管理一个游戏进程内的多个 LocalPlayer
以及玩家对应的UI布局关系。
在单机游戏中,通常只有1个 LocalPlayer
。