Svaretsky - Loading Screen System

A C++ loading screen solution for Unreal Engine 5 covering both engine boot and in-game map travel.

Built for projects that need a polished first impression at startup and controlled loading feedback during level transitions — strategy games, RPGs, city builders, and any title where loading should feel intentional rather than accidental. The plugin splits cleanly into two phases: a Slate-based Startup PreLoad screen (before the engine is fully ready) and a Travel Loading Screen driven by a GameInstanceSubsystem with a custom UMG widget you own. All configuration lives in Project Settings — no code changes required for a working setup.

Key Features

Startup PreLoad Screen — A native Slate screen integrated with UE’s PreLoadScreen pipeline. Appears during engine initialization on packaged builds, before your game world exists. Fully configurable from Project Settings → SGC Startup Loading Screen:

Branded Layout — Background image, logo, tint overlay, tip text, version string, and throbber. Layout ratios, padding, and text styles are all exposed.

Live Compile Feedback — Real-time status for shader and asset compilation (Compiling Shaders: X/Y, Compiling Assets: X/Y) with a fallback status message when no compile work is active.

Hold Time — Optional extra display duration after engine loading completes, so the screen doesn’t flash away instantly.

Startup Movie Ordering — Optional mode to play UE Startup Movies before the custom PreLoad screen, for projects that use both systems.

Packaging-Ready Assets — Startup images live in a dedicated StartupLoading folder, automatically staged as non-UFS. Editor tooling provides image pickers with live preview.

Travel Loading Screen — A GameInstanceSubsystem that manages your loading UI during map transitions:

Automatic Show on Travel — Screen appears on PreLoadMap and is re-shown after the map loads until you explicitly dismiss it.

Manual Dismiss — You control when loading ends. Call DismissLoadingScreen from Blueprint or C++ when your game is ready — ideal for async initialization, experience loading, or menu transitions.

Custom UMG Widget — Assign any Blueprint subclass of USGCLoadingScreenWidget. Full visual freedom: animations, progress bars, lore tips — whatever your designers need.

Shader Pipeline Boost — Enables fast shader pipeline cache batching while the loading screen is visible, reducing hitch when gameplay starts.

Optional Input Blocking — Configurable input swallowing while the screen is up.

Robust Viewport Handling — Automatic retry if the viewport isn’t ready yet; async preloading of the widget class before travel.

Blueprint Integration

Pre-Experience Load Status — Async Blueprint node that streams live asset and shader compile progress into your custom loading widget. Fires OnStatusChanged with formatted status text and a completion flag — perfect for driving progress UI during Game Feature / experience loading.

Dismiss from Widget — Convenience DismissLoadingScreen call directly on the widget class for designer-friendly graphs.

Debug Metrics Overlay — Separate GameInstanceSubsystem that renders an optional FPS and memory overlay. Configurable corner, font, color, z-order, and update interval. Independent from the loading screen lifecycle.

Architecture

Three focused modules — Startup (ClientOnly, PreLoadingScreen phase), Runtime (travel loading + debug), Editor (settings customization).

C++ core, Blueprint surface — Performance-sensitive boot rendering in Slate; travel UI in UMG where designers work.

No plugin content dependency — Bring your own images and widget Blueprints.

Multi-platform — Win64, Mac, Linux, Android, iOS.

Blueprint-Friendly — Set up travel loading in 4 steps: create a Widget Blueprint based on USGCLoadingScreenWidget, assign it in Project Settings → SGC Loading Screen, configure startup branding in SGC Startup Loading Screen, call DismissLoadingScreen when your game is ready to play.

Hey Svaretsky!

Quick question: Does this plugin work properly with ServerTravel in a multiplayer session when seamless travel is disabled?

Working on a non-seamless setup right now and wanted to check compatibility before buying.

Hi! Yes — non-seamless ServerTravel is supported. The loading screen lives in a Game Instance subsystem on each client and on the listen-server host (nothing runs on a dedicated server), so it stays up through the map load and is closed with Dismiss Loading Screen.

One note for the current version (1.0.1): the screen is shown automatically when the new map starts loading, not at the moment ServerTravel is called. While clients reconnect, the previous map can stay visible. Simple workaround: call Push Loading Screen on clients (e.g. from a Multicast/Client RPC) just before ServerTravel, then Dismiss once the new map is ready.

The next update improves exactly this: the screen appears on clients and the host as soon as travel starts, shows “Connecting to server…” while reconnecting, and can close automatically when loading is done.