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 hosts a live 3D character showcase in a world of its own - the player plus anyone else you register, on a stage level you author, captured into a render target the widget displays.

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

SystemKey TypesPurpose
Automatic show/hideUCrimsonLoadingScreenManagerGame-instance subsystem; evaluates 18 conditions every frame and manages the widget - no manual calls
Project settingsUCrimsonLoadingScreenSettingsWidget class, hold delay, tips, backgrounds, live preview - Project Settings -> Crimson -> Crimson Loading Screen
Hold votesICrimsonLoadingProcessInterface, UCrimsonLoadingProcessTaskGame code keeps the screen up until it is really ready (data replication, async loads)
TipsUCrimsonLoadingTipsCollection, FCrimsonLoadingTipWeighted random tip per load, optionally filtered by a FGameplayTag category
BackgroundsUCrimsonLoadingBackgroundCollectionRandom UMaterialInterface background per load (soft references, loaded on demand)
Character showcaseICrimsonLoadingCharacterProvider, FCrimsonLoadingCharacterInfoYour game describes a character's meshes, materials and anim class; the plugin renders it
Showcase hostUCrimsonShowcaseSubsystem, ACrimsonShowcaseStageThe plugin's own pocket world renders the characters and captures them - survives non-seamless loads and client joins, with no transition map and no seamless travel
Stage levelACrimsonShowcaseSlot, ACrimsonShowcaseCamera, ShowcaseStageLevelAuthor your own set as an ordinary level: standing marks per character and camera shots per head count. Unset = a built-in studio stage in an empty world.
Custom directorICrimsonLoadingCinematicInterfaceOptional. Present the roster your own way - a Sequencer flyover, a bespoke rig - by claiming the render target before the built-in host activates.
Character registrationUpdateCachedCharacterInfo, AddShowcaseCompanion, GetCachedShowcaseRosterRegister the local player and any companions. The only source the showcase has, and it outlives travel - so loads with no reachable pawn still showcase. Nothing registered means the normal loading screen.
Live previewbUseLivePreview + GetShowcaseRenderTarget() + OnShowcaseLiveChangedThe capture's render target becomes the widget background - world rendering stays on, and the widget is told when the capture actually starts and stops
Per-load presentationFCrimsonLoadingPresentation, SetNextLoadPresentationOne-shot overrides for a specific load: suppress the showcase, force a background or widget class, filter tips
EventsNative delegates + Blueprint-assignable mirrorsReact to visibility changes and content-ready from Blueprint or C++
Input + performanceFLoadingScreenInputPreProcessor, performance hooksInput eaten in packaged builds; shader cache to Fast batch mode, world rendering off, hitch detector suspended
Debug toolingCVars, -NoLoadingScreen, GetDebugReasonForShowingOrHidingLoadingScreenForce the screen on, log the show reason every frame or on a heartbeat, read the current reason from Blueprint or C++
Shader precompile progressECrimsonShaderPrecompileStateOptional. Holds the screen while Unreal precompiles bundled PSOs after a game or driver update, with an "Optimizing shaders NN%" bar

Plugin dependencies

TypeName
CrimsonNone. This plugin is fully standalone.
Engine modules (public)Core, CoreUObject, Engine, GameplayTags
Engine modules (private)Slate, SlateCore, InputCore, PreLoadScreen, RenderCore, RHI, DeveloperSettings, UMG, AssetRegistry
Editor module (private)Core, CoreUObject, Engine, Kismet (plus the runtime module)
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.
Using with other Crimson plugins
CrimsonLoadingScreen works alone. When you own other Crimson plugins, CrimsonCore contains the full-suite wiring for it: UCrimsonCoreExperienceLoadingScreenBridge in Source/CrimsonCore/{Public,Private}/Integration/Experience/ forwards each experience's loading-screen styling to SetNextLoadPresentation, UCrimsonShowcaseProviderComponent (LoadingShowcase/) registers the player's look for the character showcase, and UCrimsonLoadingScreenWidget is its finished widget base. To wire it yourself, see CrimsonCommon -> Concept: Connecting Crimson Plugins; for what CrimsonCore installs, see CrimsonCore -> Concept: The Integration Layer.

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, author a stage level, show multiple characters, control the screen per load, show shader precompile progress.
  • Mental model: Concept: Lifecycle & Show Conditions and Concept: The Cinematic Preview Pipeline.
  • Looking up a signature? Jump to API Reference.