Skip to content

Devlog #003: 引擎 UI 框架设计

很久没更新了,今天抽空记录下,关于游戏引擎中 UI/GUI 技术方案选择的一些思考。

原本这篇文章的标题是【GUI 框架设计】,但是仔细想了想,GUI 框架这个词在实际的游戏开发中用的很少,一般程序的界面框架直接简称是 UI 框架,很少有直接用 GUI 来称呼的。但是,在非游戏领域,GUI 框架往往就代表了 UI 框架。

我觉得改成 UI 框架,更能体现本文的核心内容,UI 框架是引擎内部实现的一个界面框架,底层可能基于一些其他成熟的 GUI 库。这样,从程序角度,把 UI 框架和 GUI 库区分开,从引擎的架构设计上来看,更加清晰直接。

背景

在游戏开发中,UI 框架是连接玩家与游戏世界的核心纽带。UI 界面不仅是玩家操作的直接入口,更是塑造第一印象、传递玩法信息、引导情感共鸣的关键载体。

尤其对于国产手游而言,UI 系统的复杂程度远超传统游戏:频繁的活动入口、社交功能、付费引导、实时排行榜、弹窗提示等模块高度密集,且需动态更新。

Kiso 引擎目前的底层 GUI 框架

Kiso 引擎:就是本项目当前正在开发引擎,目前用这个代号来称呼它。

  • 调试界面:基于 IMGUI,主要用来控制一些引擎开关。
    • 分为引擎层和脚本层两层,用来实现一些编辑器非常方便。
  • 运行时界面:基于 RmlUI,一个基于 HTML/CSS 的界面库。
    • 相对来说比较成熟的 GUI 框架了,但是比较可惜的是,之前还叫 libRocket 的时候官方脚本语言是 Python,现在活跃版本 RmlUi 的官方脚本语言是 Lua。
    • 给 RmlUI 实现手动一套 Python 绑定工作量太大了,官方也没有提供可以自动生成绑定的参考可以用。所以,准备换掉这个框架。

商业引擎 UI 框架分析

Unity3D: UGUI 框架

架构与功能
UGUI(Unity GUI)是 Unity 官方推出的 UI 系统,基于 组件化设计,与 Unity 的 GameObject 和 Transform 体系深度集成。核心组件包括 Canvas(画布)、RectTransform(布局控制)、EventSystem(事件系统)以及 Image/Text 等基础控件。支持通过 锚点(Anchors)自适应布局(Auto Layout) 实现多分辨率适配。

工具链与易用性
UGUI 提供可视化编辑器,开发者可通过 Scene 视图直接拖拽控件、调整属性,并配合 UI 动画系统 实现过渡效果。事件系统支持点击、拖拽等交互行为,也可通过代码或 EventTrigger 组件自定义逻辑。

性能与局限
UGUI 依赖 批处理优化,但 Canvas 层级过多或动态元素频繁更新时易引发性能问题。需合理拆分 Canvas 或使用 AssetBundle 动态加载 缓解压力。适合移动端及中小型项目,但对复杂 UI(如大量动态列表)需额外优化。

Unreal Engine: Slate UI 框架

架构与功能
Slate 是 UE 的 底层 UI 框架,采用声明式 C++ 代码构建,支持高度自定义控件和复杂布局逻辑。其核心是 SWidget 基类,通过组合嵌套实现 UI 层级。Slate 直接驱动 UE 编辑器的 UI,并衍生出 UMG(Unreal Motion Graphics) 系统,提供蓝图化的游戏 UI 开发。

工具链与灵活性
Slate 的代码驱动模式适合开发编辑器工具或高性能 UI,但学习曲线陡峭。UMG 弥补了这一缺陷,支持可视化设计器与蓝图脚本,便于快速迭代游戏 UI。布局系统支持 Slot 填充尺寸自适应,灵活性高于 UGUI。

性能与适用场景
Slate 的渲染效率较高,尤其在处理动态数据(如编辑器属性面板)时表现优异,但需注意 渲染管线逻辑更新频率 的平衡。UMG 在游戏中可能因蓝图过度调用产生性能瓶颈,需结合 C++ 模块化优化。

对比总结

维度UGUI (Unity)Slate/UMG (Unreal)
开发效率可视化编辑友好,适合快速原型开发UMG 蓝图易用,Slate 适合底层定制但门槛高
性能中等,需优化 Canvas 层级较高,Slate 底层优化更深入
适用场景移动端、独立游戏、轻量级 UI3A 项目复杂 UI、编辑器工具开发
跨平台自动适配,但需手动处理分辨率差异依赖 UE 原生支持,适配性更强

参考建议

  • UGUI 适合追求开发效率的中小团队
  • Slate/UMG 则更适合需要深度定制或高性能 UI 的大型项目,尤其是结合 UE 引擎特性的复杂应用。

候选库

MyGUI

  • Github: https://github.com/MyGUI/mygui
  • 活跃程度: 5K commit, 700 star
  • 最新版本: 3.4.3 - 2023
  • 绑定: 官方有 C#绑定,看起来比较新。
  • 体验:
    • 框架成熟
    • 相对轻量级

CEGUI

  • Github: https://github.com/cegui/cegui
  • 活跃程度: 7K commit, 500 star
  • 最新版本: 0.8.7 - 2022
  • 绑定: 官方有基于 swig 的 Python 绑定,比较笨重。
  • 体验:
    • 框架成熟
    • 比较重的框架

最终选择

【MyGUI】

  • MyGUI 是一个比较轻量级对库,集成到引擎中比较方便
  • 方便实现自动化生成绑定

后续工作

  • Kiso 渲染引擎接入 MyGUI
  • 搭建一个自动给 MyGUI 生成 Python 绑定的工程
  • 脚本层实现 UI 框架

上次更新于: