Unreal Engine
Connect CalmUI Studio to Unreal and show your UI in the game.
CalmUI works inside Unreal through the CalmUI plugin. You design the interface in Studio, while Unreal supplies game data, input, translations, and assets.
Typical workflow
- Install the matching plugin from Studio and open the Unreal project.
- Choose Tools → CalmUI Studio and connect the running Editor.
- Create or open a View and check it in Studio Preview.
- Save and wait for the package to show Up to date.
- Use Open CalmUI Screen in Blueprint. Continue from Completed when setting game values or subscribing to actions.
- Check the screen with real input in Play, then in a packaged build.
Next, connect a button to Blueprint so it runs game logic.
For advanced users
Each local player has a UCalmUiLocalPlayerSubsystem. It owns that player's
screens, input, and Store values. UCalmUiPackageAsset contains the prepared UI
package used by the game.
Use Load CalmUI Package before opening a View when its first frame depends on initial Store writes or listeners. Use the same Player Controller for loading, opening, Store access, actions, and closing so split-screen players remain isolated. C++ integrations use the same subsystem and package contracts; they do not create a second UI state model.
Anchor UI above actors
Health bars, interaction prompts, name plates, badges, and damage numbers are
ordinary elements in your HUD View. They carry
data-calmui-anchor; the game supplies where
each anchor is on screen. Publishing that through the Store would cost a reload,
a relayout, and a style resolution per actor per frame, so it travels on its own
channel instead.
Publish world locations and let the plugin project them:
- Build an array of
FCalmUiWorldAnchorLocation. Each entry has anIdthat matches an element'sdata-calmui-anchorvalue, aWorld Location, and an optionalScreen Offsetin view-space pixels: use it to lift a plate above a head socket without a second trace. - Call
SetCalmUiWorldAnchorLocationson the player'sUCalmUiLocalPlayerSubsystemevery frame. The plugin projects each location with that local player's view, adds the offset, marks entries behind the camera or outside the screen margin invisible, and returns how many ended up visible. An anchor with no visible entry is not drawn and not hit tested, and nothing in the View reflows. - Call
ClearCalmUiWorldAnchorswhen the actors that fed the table are gone.
Use SetCalmUiWorldAnchors with an array of FCalmUiWorldAnchor only when you
already have screen positions: a custom projection, a minimap, a replay camera.
Each entry carries Id, Screen Position, Depth, Scale, and Visible.
Screen Position is in view-space pixels, the same coordinate space host pointer
events arrive in; CalmUI divides by the resolved UI scale itself, exactly as it
does for the pointer, so do not pre-scale it. Scale shrinks a distant plate;
Depth is recorded for a later paint sort and does not order painting yet.
Both calls replace the whole table. That is the intended pattern: rebuild and publish the full set every frame rather than sending differences. Blueprint uses the same functions through the CalmUI Blueprint library, with the Player Controller as the first pin - the same pin every other CalmUI node takes, and the one thing that identifies which local player's table you are writing.
Each local player owns its table, so split-screen players stay isolated. Publish through the same Player Controller you use for screens, Store access, and actions.
Publish before CalmUI reads the table
Set anchors from a Tick that runs before CalmUI's scene view extension, so
the placement uses the table published in that same game-thread frame. Put the
publishing actor or component in a tick group that runs before it, normally
TG_PrePhysics on an actor whose transform is already up to date for the frame.
If the game publishes later in the frame, CalmUI uses the previous frame's table: every plate lags its actor by one frame, which is plainly visible on a fast-strafing target and invisible on a stationary one. Nothing errors, so verify by strafing past an anchored plate in Play rather than by reading a log.