DreamGUI

概览

DreamGUI 是 Unreal Engine 5.8 的 3D UI 插件:控件是挂在树上、带矩形、轴心和锚点的 UObject,由画布合批绘制,可以铺在屏幕上,也可以立在关卡里。

DreamGUI 是 Unreal Engine 5.8 的一套 UI 系统。它的一个控件是一个 UObject:有一个矩形、一个轴心(pivot) 和一组锚点,挂在一棵树上;整棵树由一块画布(UDreamCanvas)合批,尽量少地变成 draw call。 这是 Unity uGUI 的形状,而不是 Slate 的。

这个形状换来三件 UMG 做不直接的事:

  • UI 在世界里。 画布可以画在屏幕空间,也可以贴在关卡里任意角度的面上,受光或不受光, 两种情况下命中测试都是对的。
  • 一棵树就是一个类。 UI 树写在控件蓝图(UDreamWidgetBlueprint)里,靠子类化、以及把一个控件类 嵌进另一棵树来复用 —— 和 UMG 的控件蓝图是同一种做法。树也可以写成文本:一个 .dui 文件就是 一个控件蓝图的源码,设计器的改动写回这个文件。
  • 逐控件的透视。 一个控件可以建立一个透视,它的子树按这个透视缩短,就像 CSS 的 perspective。

代价是 Slate 的生态用不上:UMG 的控件、样式和绑定在这里都不适用。DreamGUI 有自己的一整套控件, 名字刻意沿用 UMG 的叫法,叫不了同名的地方都写明了原因(见它和 UMG、和上游有什么不同)。

插件版本1.0.0,第一个公开版本(之前的开发版编号是 1.x、2.0、2.1,见更新日志)
引擎Unreal Engine 5.8,源码引擎与 Epic 启动器安装版都可以
平台Win64 是唯一构建并运行过的平台(见平台)
运行时模块DreamGUIRenderer、DreamGUI、DreamGUIInput、DreamGUIControls、DreamGUIExtensions、DreamGUISamples、DreamTween
编辑器侧模块DreamGUIEditor、DreamGUIK2Nodes(UncookedOnly),DreamGUITests(Editor)
依赖插件EnhancedInput(插件自己启用)
源文件.dui,放在项目或插件的 DUI/ 目录下
项目设置Project Settings ▸ Plugins ▸ Dream GUI 与 Project Settings ▸ Plugins ▸ DreamUI
许可证MIT
来历Lex Liu 的 LGUI / LexUI 的分叉,不是它的直接替代品

一眼看上去

class /Game/UI/WBP_Hello

Widget Root {
    AnchorData.AnchorMin = (0, 0)
    AnchorData.AnchorMax = (1, 1)
    AnchorData.SizeDelta = (0, 0)
    + Overlay {}

    Text Greeting {
        AnchorData.SizeDelta = (600, 60)
        Text     = "Hello, DreamGUI"
        FontSize = 32
        HAlign   = Center
        @slot HorizontalAlignment = Center
        @slot VerticalAlignment   = Center
    }
}

Root 锚定在四个角上、不留边,所以它铺满它被加进去的东西;+ Overlay 让它把子节点叠在一起排布; Greeting 是一段 600 × 60 的文本,@slot 两行是它对上层 Overlay 提的要求:水平、垂直都居中。 把一个控件蓝图的 Source File 指向这个文件、编译,它就是一个能加到视口、也能拖进关卡的类 —— 完整的一步一步在第一个界面。

从哪里开始

本页目录