Slate UI
什么是 Slate UI
Slate UI 是 Unreal Engine 中的一套 UI 框架,Unreal Editor 的大部分界面和游戏内的 UMG UI 系统都是基于 Slate UI 构建的。
关于更详细的 Slate UI 架构概述,可以参考官方文档。
为什么要学习 Slate UI
本文档的核心主题是 Unreal Editor 插件开发,插件的使用者可能是美术、策划等非技术同学,所以为插件设计一个美观易用的 GUI 是十分必要的。
Unreal Editor 插件主要使用 C++ 和 Unreal 核心库开发,理论上我们也可以引入 QT 、Dear ImGui 、CEF 等第三方框架来构建 GUI 。相较之下,使用 Slate UI 有如下优点:
- 轻量高效:Slate UI 仅依赖 Unreal 核心库,无外部依赖。如引入第三方 GUI 框架,随之也会引入相关依赖,与 Unreal 核心库存在大量功能重合,造成代码冗余。
- 与 Unreal Editor 界面的一致性:Unreal Editor 插件是在 Unreal Editor 中运行的,使用 Slate UI ,可以保证插件界面与编辑器界面在视觉风格和行为上的一致性,便于用户理解和操作。
- 可调用 Unreal Editor 内置控件:Unreal Editor 的主要界面均使用 Slate UI 构建,意味着我们可以复用编辑器自身的一些复杂控件,简化 UI 开发流程。
- 语法的简洁性:Unreal Engine 通过大量宏定义、运算符重载、参数传递等手段,实现了在 C++ 中使用声明式语法和特有的 Slate 表达式来描述 UI ,大大简化了代码。我们将在后面的章节中讨论这些特殊语法。
以上只是一些个人见解,实际开发时是否选择 Slate UI 还需具体问题具体分析。上文提到的三个 C++ 生态下其他的 GUI 框架也都非常优秀,在工具类软件开发领域有大量应用实例。但即使不打算使用 Slate UI,学习它也会对深入理解 Unreal Editor 有很大帮助。
Debug 工具
Unreal Editor 提供了两款与 Slate UI 相关的 Debug 工具:
- Widget Reflector:
- 位于
Tools -> Debug -> Widget Reflector
,也可使用命令WidgetReflector
打开。 - 该工具可从编辑器中拾取控件,并展示出控件上下文的树形结构。
- 位于
- STARSHIP GALLERY:
- 位于
Tools -> Debug -> Debug Tools -> Test Suite
。 - 该工具展示了常用的 Slate 基本控件和对应名称。
- 位于
使用这两个 Debug 工具,可以辅助我们学习 Slate UI 和 Unreal Editor 开发。
其他资料
关于 Slate UI,社区中存在一些可以简化开发流程的方案,虽然这些方案对 Slate UI 的特性支持尚不完全,但仍提供了不错的思路:
对于开发者来说,在掌握了 Slate UI 的基本用法之后,开发流程并没有想象的那么复杂。但这些工具能够帮助不熟悉 C++ 的同学也能使用 Slate UI 为 Unreal Editor 脚本添加 GUI。