Setting up your first loading screen with LoadSensePro is designed to be straightforward while providing enterprise-grade functionality. This guide walks you through creating a complete, production-ready loading screen system from scratch.
Before starting, ensure you have:
WBP_MyFirstLoadingScreenCanvas Panel (Root)
├── Image (Name: "BackgroundImage") - REQUIRED
├── Progress Bar (Name: "LoadingProgressBar") - Optional
└── Text Block (Name: "LoadingText") - Optional
Critical Naming Convention: The BackgroundImage widget must be named exactly “BackgroundImage” for automatic detection.
// Required Blueprint Events (auto-generated when interface is added)
Event Set Background Image (Texture2D)
Event Set Loading Progress (Float: 0.0-1.0)
Event Set Loading Text (String)
DA_MyFirstLoadingScreenAdd this to any Blueprint (like PlayerController or GameMode):
// Get Loading Subsystem
ULoadingScreenSubsystem* LoadingSystem = GetGameInstance()->GetSubsystem<ULoadingScreenSubsystem>();
// Start loading with your data asset
LoadingSystem->LoadMapByDataAsset(DA_MyFirstLoadingScreen);
For production-quality loading screens, inherit from the base C++ class:
Filepath: Source/YourProject/Public/UI/WBP_MyLoadingScreen.h
Filename: WBP_MyLoadingScreen.h
// Copyright Seven-Mountains-Labs, Tim Koepsel - 2024 All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "LoadSensePro/Public/UI/WBP_LoadingScreen.h"
#include "WBP_MyLoadingScreen.generated.h"
UCLASS()
class YOURPROJECT_API UWBP_MyLoadingScreen : public UWBP_LoadingScreen
{
GENERATED_BODY()
public:
// Custom initialization logic
virtual void NativeConstruct() override;
// Custom progress handling
UFUNCTION(BlueprintCallable, Category = "Loading")
void OnProgressUpdated(float Progress, const FString& StatusText);
protected:
// Custom widgets for enhanced functionality
UPROPERTY(meta = (BindWidgetOptional))
class UImage* LogoImage;
UPROPERTY(meta = (BindWidgetOptional))
class UTextBlock* TipText;
// Progress animation controls
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Animation")
float ProgressAnimationSpeed = 2.0f;
private:
// Smooth progress interpolation
void UpdateProgressSmooth(float TargetProgress);
float CurrentProgress = 0.0f;
float TargetProgress = 0.0f;
};
Create enhanced audio experience:
MusicConfig_LoadingAmbientLoadSensePro automatically handles multiplayer synchronization, but for custom logic:
// In your custom loading widget
UFUNCTION(BlueprintImplementableEvent)
void OnMultiplayerSyncReady();
// Called when all clients are loaded and ready
UFUNCTION(BlueprintCallable)
void HandleMultiplayerReady()
{
// Custom multiplayer initialization
OnMultiplayerSyncReady();
}
Problem: Widget doesn’t show during level transition
Solutions:
BackgroundImage widget exists and is named correctlyProblem: Only first image shows, no cycling
Solutions:
SetBackgroundImage event in widget BlueprintProblem: Progress remains at 0% or doesn’t animate
Solutions:
SetLoadingProgress eventLogLoadingScreen VeryVerbose in consoleProblem: Loading music doesn’t start
Solutions:
bPreloadImages = true in subsystem settingsRecommended folder structure:
Content/
├── LoadingScreens/
│ ├── DataAssets/
│ │ ├── DA_MainMenuLoading
│ │ ├── DA_GameplayLoading
│ │ └── DA_CutsceneLoading
│ ├── Widgets/
│ │ ├── WBP_LoadingScreen_Main
│ │ └── WBP_LoadingScreen_Minimal
│ ├── Images/
│ │ ├── Loading_Background_01
│ │ └── Loading_Background_02
│ └── Audio/
│ ├── MusicConfig_Ambient
│ └── LoadingMusic_Track01
// In your Game Mode's BeginPlay or transition logic
void AMyGameMode::LoadNextLevel(const FString& LevelName)
{
ULoadingScreenSubsystem* LoadingSystem =
GetGameInstance()->GetSubsystem<ULoadingScreenSubsystem>();
if (LoadingSystem && LoadingScreenDataAsset)
{
// Update target map in data asset at runtime if needed
LoadingScreenDataAsset->MapName = LevelName;
LoadingSystem->LoadMapByDataAsset(LoadingScreenDataAsset);
}
}
// In your main menu widget
UFUNCTION(BlueprintCallable)
void StartGame()
{
ULoadingScreenSubsystem* LoadingSystem =
GetGameInstance()->GetSubsystem<ULoadingScreenSubsystem>();
// Use specific loading configuration for game start
LoadingSystem->LoadMapByDataAsset(GameStartLoadingData);
}
// For custom loading progress tracking
void AMyGameInstance::TrackCustomLoadingProgress()
{
ULoadingScreenSubsystem* LoadingSystem = GetSubsystem<ULoadingScreenSubsystem>();
// Bind to progress events
LoadingSystem->OnMapLoadingProgress.AddDynamic(this, &AMyGameInstance::OnLoadingProgress);
LoadingSystem->OnMapLoadingComplete.AddDynamic(this, &AMyGameInstance::OnLoadingComplete);
}
UFUNCTION()
void AMyGameInstance::OnLoadingProgress(float Progress, const FString& StatusMessage)
{
// Custom progress handling
UE_LOG(LogGame, Log, TEXT("Loading: %.1f%% - %s"), Progress * 100.0f, *StatusMessage);
}
Once your first loading screen is working:
LoadSensePro - Professional loading screens for professional games.