A 3D UI system for Unreal Engine 5.8

DreamGUI

A widget is an object with a rect, anchors and a pivot, batched by a canvas — on the screen, or standing in the level at any angle with correct hit testing either way. A UI tree is a widget Blueprint you subclass, written as .dui text or in a UMG-style designer that edits the same class. A control library, tweens, per-player input and gamepad navigation come with it.

  • DreamGUI1.0.0
  • UE5.8
  • Tests2400+
  • LicenseMIT

DreamGUI · UI in the world

Scroll

What it looks like

One .dui file is one UI class

A whole settings screen: a library supplies the styles and the Row component, rows writes one instance per line, the button routes its click to a function on the user widget, and the hint is shown while a variable says so. Compiled, it is an ordinary widget Blueprint, and a property changed on it in the designer is written back into this text.

WBP_Settings.duiDreamUI
class /Game/UI/WBP_Settingsuse "UI/Library.dui" as uiVerticalBox Root : ui.Page {    Spacing = 24    Text Title : ui.Heading { Text = "Settings" }    rows ui.Row : ui.Wide (Label, Value) {        "Subtitles",  "On"        "Difficulty", "Normal"        "Vibration",  "Off"    }    Native.Button Apply {        Text { Text = "Apply" }        OnClicked -> HandleApply    }    Text Hint : ui.Note {        Shown <- bDirty        Text  = "Unsaved changes"    }}

compiles into /Game/UI/WBP_Settings — on the screen or in the level

UDreamUIBPLibrary::AddWidgetOfClassToViewport(this, WBP_Settings)

Workflow

Write a tree, put it on the screen or in the world

The same class can be a layer on the screen or a panel in the level. The screen root, the raycaster and the event system are created on demand — nothing to set up first.

  1. Author

    Write nodes, styles, components, bindings, if / for and timelines in .dui; change a property in the designer and the edit lands on its line in the text, so the two never fork.

  2. Compile

    A .dui compiles into a UDreamWidgetBlueprint whose class is a UDreamUserWidget: subclass it, nest it in another tree, reach its children by name.

  3. Place

    One call adds it to the viewport; dragged into a level it is an ADreamWorldWidgetActor, drawn by DreamGUI's own renderer or sent through the engine's pipeline for post process and depth.

  4. Interact

    Every local player has its own pointers, focus and text target; Tab and gamepad navigation, modals and popups, drag and drop and tooltips live in the input module, and motion in tweens and timelines.