Overview
LoadScreenPro gives your game a complete loading screen without any Blueprint or C++ work. It drives the engine's built-in movie player, which renders on its own thread while the game thread is blocked loading a map, so icons, tips and movies keep playing during the load. Everything is configured in Project Settings > Game > LoadScreenPro.
- Two screens: a startup screen shown when the game launches (studio logo movies) and a default screen shown on every level transition.
- Movies from
Content/Movies, with shuffle, playback type, skippable and minimum display time options.
- Background images picked at random, rotated on a timer or chosen by index from Blueprint, with stretch mode, padding and background colour.
- Tips picked at random, rotated on a timer or chosen by index, with full text appearance settings and wrapping.
- Loading icon: Throbber, Circular Throbber or an animated image sequence, next to or above/below a loading text.
- Five layouts: Classic, Center, Letterbox, Sidebar and Dual Sidebar, each with its own alignment, padding, offsets and border brushes.
- Loading complete text with a fade animation, so the player presses a key to continue.
- PSO precache wait: keep the screen up until shader pipeline precompilation is done, with a timeout and an optional progress bar.
- Blueprint control of the next loading screen: choose the background, tip or movie, disable the screen, or stop it manually.
- 75 sample textures to build a screen in minutes.
Requirements
| Requirement | Details |
| Unreal Engine | 4.27 and 5.8 (verified clean on both) |
| Modules | LoadScreenPro (Runtime, loading phase PreLoadingScreen; not loaded on dedicated-server targets) |
| Dependencies | None (uses the engine modules MoviePlayer, Slate, SlateCore, DeveloperSettings, RenderCore and RHI) |
| Language | Blueprints and C++ (configuration needs neither) |
| Platforms | No platform restriction in the plugin descriptor. Win64 is the platform built and verified by Alpha XP; other platforms with an engine movie player are supported by the code, not verified by Alpha XP. |
Installation
- Copy the
LoadScreenPro folder into your project's Plugins/ folder (create it if needed), or install the plugin to the engine from Fab.
- Open the project. For a C++ project, let the editor build the module or build it from your IDE.
- Enable LoadScreenPro in Edit > Plugins (category User Interface) and restart the editor.
- Disable any other plugin that also sets up a movie-player loading screen; only one system can own the movie player.
- C++ only: add
"LoadScreenPro" to PublicDependencyModuleNames in your module's Build.cs to call the library or read the settings from code.
Verifying the installOpen Project Settings: a LoadScreenPro page appears under the Game section, and the six nodes of the LoadScreenPro category are available in any Blueprint graph.
Quick start
Blueprint / no-code setup
- Open Project Settings > Game > LoadScreenPro > General > Default Loading Screen.
- Keep bShowWidgetOverlay enabled (shown as Show Widget Overlay).
- Under Background > Images add one or more textures.
- Under Tip Widget > Tip Text add a few tips.
- Under Loading Widget pick a LoadingIconType. For Image Sequence, add the frames of
/LoadScreenPro/Default/StickFigure/RunImages to Image Sequence Settings > Images in order.
- Pick a Layout (Classic by default).
- Launch with Play > Standalone Game (or a packaged build) and open another level with Open Level. The loading screen is shown while the level loads.
To choose what the next loading screen shows, call Set Display Background Index, Set Display Tip Text Index or Set Display Movie Index before Open Level, and enable the matching manual option in the settings. Call Set Enable Loading Screen with false to skip the screen for a transition.
C++
#include "LoadScreenProLibrary.h"
#include "LoadingScreenSettings.h"
#include "Kismet/GameplayStatics.h"
void AMyGameMode::TravelToArena()
{
// Requires bSetDisplayBackgroundManually / bSetDisplayTipTextManually in the Default Loading Screen settings.
ULoadScreenProLibrary::SetDisplayBackgroundIndex(2);
ULoadScreenProLibrary::SetDisplayTipTextIndex(0);
// Show the loading screen for this transition (true is the default).
ULoadScreenProLibrary::SetEnableLoadingScreen(true);
UGameplayStatics::OpenLevel(this, TEXT("Arena"));
}
int32 AMyGameMode::GetNumberOfTips() const
{
const ULoadingScreenSettings* Settings = GetDefault<ULoadingScreenSettings>();
return Settings->DefaultLoadingScreen.TipWidget.TipText.Num();
}
How it works
- The module loads in the PreLoadingScreen phase and immediately sets up the Startup Loading Screen with the engine movie player.
- Every time the engine prepares a loading screen for a map load, the Default Loading Screen is set up, unless it was disabled with Set Enable Loading Screen.
- Seamless travel does not open a movie-player loading screen; use a transition map or a regular map load if you need the screen there.
- When bWaitForPSOPrecachingToComplete is enabled, the plugin keeps the movie player waiting after the level has loaded, polls the number of outstanding pipeline precompiles and stops the screen when it reaches zero, when PSOPrecacheMaxWaitTime expires, and only after MinimumLoadingScreenDisplayTime. The priority boost (bBoostPSOPrecachePriority) requires UE 5.8; on UE 4.27 the wait uses the bundled PSO cache count only.
Blueprint nodes
All nodes are static functions of ULoadScreenProLibrary, category LoadScreenPro.
| Node | Type | Description |
| Set Display Background Index | Callable | Chooses the background image (index into Background > Images) for the next loading screen. Needs bSetDisplayBackgroundManually; an invalid index falls back to a random image. |
| Set Display Tip Text Index | Callable | Chooses the tip (index into Tip Widget > Tip Text). Needs bSetDisplayTipTextManually; an invalid index falls back to a random tip. |
| Set Display Movie Index | Callable | Chooses the movie (index into Movie Paths). Needs bSetDisplayMovieIndexManually; an invalid index plays the whole list. |
| Set Enable Loading Screen | Callable | Enables or disables the loading screen for the following level loads (enabled by default). |
| Get Is Enable Loading Screen | Pure | Returns whether the loading screen is currently enabled. |
| Stop Loading Screen | Callable | Stops the current loading screen. Used with bWaitForManualStop; requires bAllowEngineTick so Blueprint code runs while the screen is up (call it from BeginPlay, for example after a Delay). |
C++ API
| Type | Kind | Description |
| ULoadScreenProLibrary | Class | Blueprint function library above; also exposes GetDisplayBackgroundIndex(), GetDisplayTipTextIndex() and GetDisplayMovieIndex() to C++. Header LoadScreenProLibrary.h. |
| ULoadingScreenSettings | Class | The Project Settings object (UDeveloperSettings, saved to DefaultGame.ini). Read with GetDefault<ULoadingScreenSettings>(). Header LoadingScreenSettings.h. |
| FLoadingScreenProfile | Struct | One complete loading screen (movies + widget overlay + layout choice). Used for StartupLoadingScreen and DefaultLoadingScreen. |
| ELoadScreenProLayout | Enum | LSPL_Classic, LSPL_Center, LSPL_Letterbox, LSPL_Sidebar, LSPL_DualSidebar. |
| ELoadingIconType | Enum | LIT_Throbber, LIT_CircularThrobber, LIT_ImageSequence. |
| ELoadingWidgetType | Enum | LWT_Horizontal, LWT_Vertical (text beside or above/below the icon). |
| LogLoadScreenPro | Log | Log category for the plugin's warnings. |
Settings
Location: Project Settings > Game > LoadScreenPro. Values are stored in Config/DefaultGame.ini under [/Script/LoadScreenPro.LoadingScreenSettings]. The editor shows each property name split into words (boolean names without the leading b).
| Setting | Default | Description |
| StartupLoadingScreen | Widget overlay off, tip wrap 1000 | Screen shown when the game starts. Typically used for logo movies only. |
| DefaultLoadingScreen | Widget overlay on, tip wrap 1000 | Screen shown on every level transition. |
| Classic | see Layout settings | Settings of the Classic layout. |
| Center | see Layout settings | Settings of the Center layout. |
| Letterbox | see Layout settings | Settings of the Letterbox layout. |
| Sidebar | see Layout settings | Settings of the Sidebar layout. |
| DualSidebar | see Layout settings | Settings of the Dual Sidebar layout. |
Loading screen profile (Startup / Default Loading Screen)
| Setting | Default | Description |
| MinimumLoadingScreenDisplayTime | -1 | Minimum time the screen stays up, in seconds; -1 means no minimum. |
| bAutoCompleteWhenLoadingCompletes | true | Closes the screen as soon as loading is done. |
| bMoviesAreSkippable | true | Movies can be skipped with a click once loading is done. |
| bWaitForManualStop | false | Keeps the screen up until it is stopped (key press when the minimum time is -1, or Stop Loading Screen). |
| bAllowInEarlyStartup | false | Starts movies very early on supported platforms; the widget overlay and PSO wait are ignored in this mode. |
| bAllowEngineTick | false | Ticks the engine while waiting for the screen to finish (needed for Stop Loading Screen). |
| bWaitForPSOPrecachingToComplete | false | Keeps the screen up until outstanding PSO precompiles are done (takes over Wait For Manual Stop). |
| PSOPrecacheMaxWaitTime | 0 | Safety timeout for the PSO wait, counted from the end of level loading; 0 waits without limit. |
| bBoostPSOPrecachePriority | true | Raises outstanding PSO precompiles to the highest priority while the screen is up (UE 5.8; no effect on 4.27). |
| PlaybackType | MT_Normal | Movie playback mode: Normal Playback, Looped Playback or Looped Last Playback (loops the last movie until loading is done). |
| MoviePaths | empty | Movie names without extension, relative to Content/Movies. |
| bShuffle | false | Shuffles the movie list before playing. |
| bSetDisplayMovieIndexManually | false | Plays only the movie chosen with Set Display Movie Index. |
| bShowWidgetOverlay | true (Startup: false) | Shows the background, tips and loading widget on top of the movie. |
| bShowLoadingCompleteText | false | Shows a text when loading is done (use with Wait For Manual Stop and minimum time -1). |
| LoadingCompleteTextSettings | see below | Text, appearance, alignment, padding and fade animation of the loading complete text. |
| Background | see below | Background image settings. |
| TipWidget | see below | Tip text settings. |
| LoadingWidget | see below | Loading icon and loading text settings. |
| PSOPrecacheProgressWidget | see below | PSO precache progress bar settings. |
| Layout | LSPL_Classic | Layout used to arrange the widgets. |
Background
| Setting | Default | Description |
| Images | empty | Textures shown as background; one is picked at random. |
| UpdateInterval | 0 | Seconds between random image changes; 0 or less never changes it. |
| ImageStretch | ScaleToFit | How the image is scaled to the screen. |
| Padding | 0 | Space between the screen edge and the image. |
| BackgroundColor | Black | Fills the screen when no image is set, otherwise visible in the padding. |
| bSetDisplayBackgroundManually | false | Uses the index set with Set Display Background Index (and stops the timed rotation). |
Tip Widget
| Setting | Default | Description |
| TipText | empty | Tips (multi-line); one is picked at random. |
| UpdateInterval | 0 | Seconds between random tip changes; 0 or less never changes it. |
| Appearance | Roboto 20, white | Text appearance (see Text appearance below). |
| TipWrapAt | 1000 | Width at which the tip wraps to the next line. |
| bSetDisplayTipTextManually | false | Uses the index set with Set Display Tip Text Index. |
Loading Widget
| Setting | Default | Description |
| LoadingIconType | LIT_CircularThrobber | Throbber, Circular Throbber or Image Sequence. |
| LoadingWidgetType | LWT_Horizontal | Text beside the icon (horizontal) or above/below it (vertical). |
| TransformTranslation | (0, 0) | Render translation of the icon. |
| TransformScale | (1, 1) | Render scale of the icon; a negative value flips it. |
| TransformPivot | (0.5, 0.5) | Render transform pivot (normalized). |
| LoadingText | "LOADING" | Text shown next to the icon; empty hides it. |
| bLoadingTextRightPosition | true | Horizontal type: text on the right of the icon. |
| bLoadingTextTopPosition | true | Vertical type: text above the icon. |
| Appearance | Roboto 32 Bold, white | Loading text appearance. |
| ThrobberSettings | 3 pieces, animate all | NumberOfPieces (1-25), bAnimateHorizontally, bAnimateVertically, bAnimateOpacity, piece Image. |
| CircularThrobberSettings | 6 pieces, 0.75 s, radius 64 | NumberOfPieces, Period, Radius, piece Image. |
| ImageSequenceSettings | scale (1, 1), 0.05 s | Images (frames in order), Scale, Interval between frames (0 = every frame), bPlayReverse. |
| TextAlignment | Center / Center | Alignment of the loading text. |
| LoadingIconAlignment | Center / Center | Alignment of the icon. |
| Space | 1 | Space between text and icon. |
| bHideLoadingWidgetWhenCompletes | false | Hides the loading widget once loading is done. |
Loading Complete Text
| Setting | Default | Description |
| LoadingCompleteText | empty | Text shown when loading is done (for example "Press any key to continue"). |
| Appearance | Roboto 24, white | Text appearance. |
| Alignment | Center / Center | Position on screen. |
| Padding | 0 | Text padding. |
| bFadeInOutAnim | true | Pulses the text opacity. |
| AnimationSpeed | 1 | Fade speed (0-10). |
PSO Precache Progress Widget
| Setting | Default | Description |
| bShowProgressWidget | false | Shows a progress bar while PSO precompiles are outstanding; it hides itself when they are done. |
| ProgressText | "Compiling Shaders... {Percent}%" | Text under the bar; supports {Percent} and {Remaining}; empty shows the bar only. |
| Appearance | Roboto 18, centered | Progress text appearance. |
| Style | dark background, white fill | Progress bar style (background and fill brushes). |
| BarSize | (500, 20) | Size of the bar. |
| Alignment | Center / Bottom | Position on screen. |
| Padding | (0, 0, 0, 60) | Padding around the widget. |
| UpdateInterval | 0.1 | Seconds between updates (0 = every frame). |
Text appearance and alignment
| Setting | Default | Description |
| ColorAndOpacity | White | Text colour. |
| Font | Roboto (size per widget) | Font, size and typeface. |
| ShadowOffset | (0, 0) | Drop shadow offset in pixels. |
| ShadowColorAndOpacity | White | Shadow colour. |
| Justification | Left | Text justification. |
| HorizontalAlignment | Center | Horizontal alignment of a widget alignment entry. |
| VerticalAlignment | Center | Vertical alignment of a widget alignment entry. |
Layout settings
Classic
A border with the loading widget and the tip, anchored to the bottom or top of the screen.
| Setting | Default | Description |
| bIsWidgetAtBottom | true | Border at the bottom (false: top). |
| bIsLoadingWidgetAtLeft | true | Loading widget left of the tip. |
| Space | 1 | Space between loading widget and tip. |
| TipAlignment | Center / Center | Alignment of the tip. |
| BorderHorizontalAlignment | Fill | Horizontal alignment of the border. |
| BorderPadding | 0 | Padding inside the border. |
| BorderBackground | default brush | Border background brush. |
Center
The loading widget in the middle of the screen; the tip in a border at the bottom or top.
| Setting | Default | Description |
| bIsTipAtBottom | true | Tip border at the bottom (false: top). |
| TipAlignment | Center / Center | Alignment of the tip. |
| BorderHorizontalAlignment | Fill | Horizontal alignment of the border. |
| BorderVerticalOffset | 0 | Offset from the bottom or top edge. |
| BorderPadding | 0 | Padding inside the border. |
| BorderBackground | default brush | Border background brush. |
Letterbox
Two borders at the top and bottom; the loading widget in one, the tip in the other.
| Setting | Default | Description |
| bIsLoadingWidgetAtTop | true | Loading widget in the top border (false: bottom). |
| TipAlignment | Center / Center | Alignment of the tip. |
| LoadingWidgetAlignment | Center / Center | Alignment of the loading widget. |
| TopBorderHorizontalAlignment | Fill | Horizontal alignment of the top border. |
| BottomBorderHorizontalAlignment | Fill | Horizontal alignment of the bottom border. |
| TopBorderPadding | 0 | Padding inside the top border. |
| BottomBorderPadding | 0 | Padding inside the bottom border. |
| TopBorderBackground | default brush | Top border brush. |
| BottomBorderBackground | default brush | Bottom border brush. |
Sidebar
One vertical border on the left or right, suited to long tips and story text.
| Setting | Default | Description |
| bIsWidgetAtRight | true | Border on the right (false: left). |
| bIsLoadingWidgetAtTop | true | Loading widget above the tip. |
| Space | 1 | Space between loading widget and tip. |
| VerticalAlignment | Center | Vertical alignment of the widget column. |
| LoadingWidgetAlignment | Center / Center | Alignment of the loading widget. |
| TipAlignment | Center / Center | Alignment of the tip. |
| BorderVerticalAlignment | Fill | Vertical alignment of the border. |
| BorderHorizontalOffset | 0 | Offset from the left or right edge. |
| BorderPadding | 0 | Padding inside the border. |
| BorderBackground | default brush | Border background brush. |
Dual Sidebar
Two vertical borders; the loading widget on one side, the tip on the other.
| Setting | Default | Description |
| bIsLoadingWidgetAtRight | true | Loading widget in the right border (false: left). |
| LeftVerticalAlignment | Center | Vertical alignment of the left content. |
| RightVerticalAlignment | Center | Vertical alignment of the right content. |
| LeftBorderVerticalAlignment | Fill | Vertical alignment of the left border. |
| RightBorderVerticalAlignment | Fill | Vertical alignment of the right border. |
| LeftBorderPadding | 0 | Padding inside the left border. |
| RightBorderPadding | 0 | Padding inside the right border. |
| LeftBorderBackground | default brush | Left border brush. |
| RightBorderBackground | default brush | Right border brush. |
Content
Sample textures under /LoadScreenPro/Default (in the Content Browser, open the LoadScreenPro plugin content folder; enable Show Plugin Content in the view options if it is hidden). Use them directly or as a template for your own art.
| Asset | Type | Description |
Default/Icon/ | Texture2D | 11 small white icons for throbber pieces: icon-5-point-star, icon-8-point-star, icon-cat-print, icon-circle, icon-flower-01 to icon-flower-04, icon-heart-card, icon-seal, icon-sheriffs-badge. |
Default/LoadingImages/LoadingIcon01_* | Texture2D | 8-frame spinner image sequence (LoadingIcon01_1 to LoadingIcon01_8). |
Default/LoadingImages/LoadingIcon02_* | Texture2D | 12-frame spinner image sequence (LoadingIcon02_1 to LoadingIcon02_12). |
Default/LoadingImages/LoadingIcon03_* | Texture2D | 12-frame spinner image sequence (LoadingIcon03_1 to LoadingIcon03_12). |
Default/StickFigure/IdleImages/ | Texture2D | 16-frame idle stick figure image sequence (StickFigure_Idle-0 to StickFigure_Idle-15). |
Default/StickFigure/RunImages/ | Texture2D | 16-frame running stick figure image sequence (StickFigure_Run-0 to StickFigure_Run-15). |
Using an image sequenceSet LoadingIconType to Image Sequence and add the frames to Image Sequence Settings > Images in numeric order (0, 1, 2 ... 15). Adjust Interval for speed.
Packaging
- The module loads before textures are found through normal references. Add the folders that hold your loading-screen textures to Project Settings > Packaging > Additional Asset Directories to Cook (for example
/Game/LoadingScreen, or /LoadScreenPro/Default for the samples).
- Movies are read as loose files: add
Movies to Additional Non-Asset Directories To Copy so they are not packed into the .pak file.
- For loading-screen textures, set Texture Group to UI and Compression Settings to UserInterface2D.
Troubleshooting
| Symptom | Cause and fix |
| No loading screen in Play-In-Editor | The engine movie player is disabled in PIE. Test with Play > Standalone Game or a packaged build. |
| Background or icon images missing in a packaged build | The textures were not cooked. Add their folder to Additional Asset Directories to Cook (see Packaging). |
| Startup movie does not play | The file must be in Content/Movies, the name in MoviePaths must have no extension, and Movies must be in Additional Non-Asset Directories To Copy. |
| The screen flashes and disappears | The level loads very quickly. Set MinimumLoadingScreenDisplayTime to the number of seconds the screen should stay up. |
| The screen never closes | bWaitForManualStop is enabled. Press a key (minimum time -1) or call Stop Loading Screen with bAllowEngineTick enabled. With the PSO wait enabled, set a PSOPrecacheMaxWaitTime. |
| Only the movie is shown, no widgets | bShowWidgetOverlay is off (default for the startup screen), or bAllowInEarlyStartup is on, which cannot show widgets; a warning in LogLoadScreenPro confirms the second case. |
| No loading screen in a Standalone or development build | The game was started with the -NoLoadingScreen command-line switch, which disables the engine movie player in non-shipping builds. Remove the switch. |
| Another loading screen appears instead | Another plugin or game code also sets up the movie player. Disable it; only one system can own the loading screen. |
| Chosen background or tip is ignored | Enable bSetDisplayBackgroundManually / bSetDisplayTipTextManually and pass a valid index; invalid indices fall back to a random entry. |