CrimsonLoadingScreen
CrimsonLoadingScreen shows and hides a loading screen for you. UCrimsonLoadingScreenManager, a UGameInstanceSubsystem, evaluates a set of conditions every frame - no world yet, GameState not replicated, pending or seamless travel, missing local PlayerController, plus any votes from your own game code - and puts your UMG widget on the viewport while any condition holds. You never call Show or Hide. On top of that it picks a weighted random tip and a random background material per load, blocks input in packaged builds, switches the engine into loading-friendly performance modes, and can feed a live 3D character showcase into the widget via a render target.
New here? Read in this order
Do Quick Start first (a working loading screen with a tip and background), then How-To: Get the Building Blocks - it shows the exact Blueprint nodes and C++ for reaching the manager, the settings, and the data assets that every other page assumes you can reach. Use the Blueprint / C++ / Both switch at the top to see the path for your project type.
What's included
| System | Key Types | Purpose |
|---|---|---|
| Automatic show/hide | UCrimsonLoadingScreenManager | Game-instance subsystem; evaluates 16 conditions every frame and manages the widget - no manual calls |
| Project settings | UCrimsonLoadingScreenSettings | Widget class, hold delay, tips, backgrounds, live preview - Project Settings -> Crimson -> Crimson Loading Screen |
| Hold votes | ICrimsonLoadingProcessInterface, UCrimsonLoadingProcessTask | Game code keeps the screen up until it is really ready (data replication, async loads) |
| Tips | UCrimsonLoadingTipsCollection, FCrimsonLoadingTip | Weighted random tip per load, optionally filtered by a FGameplayTag category |
| Backgrounds | UCrimsonLoadingBackgroundCollection | Random UMaterialInterface background per load (soft references, loaded on demand) |
| Character showcase | ICrimsonLoadingCharacterProvider, FCrimsonLoadingCharacterInfo | Your game supplies the player's meshes/materials/anim so a showcase level can display them |
| Showcase director | ICrimsonLoadingCinematicInterface | An actor in your showcase level receives start/end callbacks with the character data |
| Live preview | bUseLivePreview + GetShowcaseRenderTarget() | A SceneCapture2D render target becomes the widget background - world rendering stays on |
| Events | Native delegates + Blueprint-assignable mirrors | React to visibility changes and content-ready from Blueprint or C++ |
| Input + performance | FLoadingScreenInputPreProcessor, performance hooks | Input eaten in packaged builds; shader cache to Fast batch mode, world rendering off, hitch detector suspended |
| Debug tooling | CVars, -NoLoadingScreen, crimson.loading.get_state | Force the screen on, log the show reason every frame, query state via MCP |
Plugin dependencies
| Type | Name |
|---|---|
| Crimson | CrimsonCommon (logging macros) |
| Engine modules (public) | Core, CoreUObject, GameplayTags |
| Engine modules (private) | Engine, Slate, SlateCore, InputCore, PreLoadScreen, RenderCore, DeveloperSettings, UMG |
Multiplayer-ready by design
The manager never creates on dedicated servers (
ShouldCreateSubsystem returns false), and the built-in conditions already wait for GameState replication and local PlayerController spawn - the two things that most often finish after the map loads on a client. Everything here is client-side presentation; no gameplay state is involved.Not the same as CrimsonUI's loading subsystem
CrimsonUI ships an unrelated
UCrimsonLoadingScreenSubsystem that only stores a per-map widget class. This plugin's manager is UCrimsonLoadingScreenManager. If a node search shows both, pick the Manager for everything on these pages.Where to go next
- Quick Start - a working loading screen with tip text and a background, end to end.
- How-To: Get the Building Blocks - the exact nodes/code to reach the manager, the settings, and the data assets (read this second).
- Task pages: show tips and backgrounds, hold the screen from game code, react to events, showcase the player's character, live render target preview.
- Mental model: Concept: Lifecycle & Show Conditions and Concept: The Cinematic Preview Pipeline.
- Looking up a signature? Jump to API Reference.