概述
UI布局系统,用于组织和管理每一个游戏玩家的视口中,不同UI层次之间的内容,以清晰,模块化的方式管理复杂的多层级UI界面。
准备你的游戏布局
定位到 ProjectSettings -> Game -> Generic UI System Settings,在这里选择你的UI策略。

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

布局设置
以 WB_GUI_GameUILayout 为例,它只是一个空的,继承自 GUIS_GameUILayout 的 Widget 蓝图。

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

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

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

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

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

用这几个简单的API,你可以操纵很复杂的UI层级,比如:
- HUD
- 暂停菜单
- 设置菜单
- 游戏设置
- 操纵设置
⚠️ 注意:能被推送到的UI层的Widget必须继承自 CommonActivatableWidget。
UI策略的用途
UI策略主要用于确定游戏的布局,并管理一个游戏进程内的多个 LocalPlayer 以及玩家对应的UI布局关系。
在单机游戏中,通常只有1个 LocalPlayer。
可激活控件
每一个UI层中,实际内容由可激活控件(CommonActivatableWidget)呈现。
在GGS中,你可以使用经过拓展的GUIS_ActivatableWidget。
通过它,你可以在Widget的默认设置中的Input部分,为其指定该空间的输入配置,以及鼠标捕获方式。
同样的,你可以通过实现Get Desired Input Config来逐空间自定义输入配置。
Loading Blueprint
Initializing BlueprintUE renderer...
