# Seamless, Proper Loading Screens! \[Play Movies, Audio & Animated Widgets!\]

**URL:** <https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993>\
**Category:** Programming & Scripting\
**Tags:** unreal-engine\
**Created:** [December 28, 2015, 4:56pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993 "2015-12-28T16:56:46Z")\
**Posts on this page:** 11\
**Page:** 4

<div class="post-metadata">

**Author:** ![JohnADaniels](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/johnadaniels/32/1080686_2.png) [@JohnADaniels](https://forums.unrealengine.com/u/JohnADaniels)\
**Post date:** [August 6, 2019, 2:24am UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/65 "2019-08-06T02:24:49Z")

</div>

Just got the Nick’s plug-in to work, I am soooo happy, now I can pass testing for the console!!! Yeaaaaaaaa THANK YOU NICK!!!

---

<div class="post-metadata">

**Author:** ![anonymous\_user\_ced240eb](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@anonymous\_user\_ced240eb](https://forums.unrealengine.com/u/anonymous_user_ced240eb)\
**Post date:** [September 27, 2019, 5:42am UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/66 "2019-09-27T05:42:56Z")

</div>

> [@](#):
>
> quick question: Is possible to use a FLoadingScreenAttributes and GetMoviePlayer() during a Seamless Travel + Transition Map? I can’t do it on my tests.
> 
> Thx.

For everybody trying to get seamless travel to work with loading screen, it IS possible, I’ve figured it out, without too much additional modifications to TheJamsh’s code.

you’ll first need to make the functions callable from blueprint:

```auto

UCLASS()
class MYPROJECT_API UMyGameInstance : public UGameInstance
{
    GENERATED_BODY()

    public:
    virtual void Init() override;

    UFUNCTION(BlueprintCallable, Category = "Loading")
        virtual void BeginLoadingScreen(const FString& MapName);
    UFUNCTION(BlueprintCallable, Category = "Loading")
        virtual void EndLoadingScreen(UWorld* InLoadedWorld);

};

```

Then, use these exact settings if you want your loading screen to work automatically for both seamless and non-seamless travel. The key component is LoadingScreen.bAllowEngineTick = true; This allows the game thread to continue running while playing a movie, imitating the behavior of a non-seamless loadscreen call.

```auto

void UMyGameInstance::BeginLoadingScreen(const FString& InMapName)
{
    if (!IsRunningDedicatedServer())
    {
        FLoadingScreenAttributes LoadingScreen;
        LoadingScreen.WidgetLoadingScreen = FLoadingScreenAttributes::NewTestLoadingScreenWidget();

        LoadingScreen.bAutoCompleteWhenLoadingCompletes = true;
        LoadingScreen.MinimumLoadingScreenDisplayTime = 6000;
        LoadingScreen.bMoviesAreSkippable = false;
        LoadingScreen.bWaitForManualStop = false;
        LoadingScreen.bAllowEngineTick = true;

        GetMoviePlayer()->SetupLoadingScreen(LoadingScreen);
        GetMoviePlayer()->PlayMovie();
    }
}

void UMyGameInstance::EndLoadingScreen(UWorld* InLoadedWorld)
{
    GetMoviePlayer()->StopMovie();
}

```

Then inside blueprints (I’m using my Lobby’s pawn, that works for me), call your functions as such:

 ![Capture.PNG](https://d3kjluh73b9h9o.cloudfront.net/original/3X/6/a/6a0a490c9f774ba61a73163641156b0e46600e71.png)

side note: I dont think Begin Loading Screen “Map Name” variable needs a value since it’s not used.

This will show the loading screen on all clients and listen server until your final map has finished loading. 🙂

---

<div class="post-metadata">

**Author:** ![sabibo67](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@sabibo67](https://forums.unrealengine.com/u/sabibo67)\
**Post date:** [November 5, 2019, 10:33pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/67 "2019-11-05T22:33:02Z")

</div>

Is there some reason the plugin version doesn’t have the references to Widgets? Also – does it not work in PIE / VR Preview? It only seems to do anything for me if I play standalone…

---

<div class="post-metadata">

**Author:** ![RowelCaps](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@RowelCaps](https://forums.unrealengine.com/u/RowelCaps)\
**Post date:** [February 15, 2020, 9:20pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/68 "2020-02-15T21:20:00Z")

</div>

> [@Druha](#):
>
> **antsonthetree** , Yes, this can be used with UMG widget:
> 
> ```auto
> 
> UUserWidget* LoadingWidget; // Pointer to your UMG widget
> 
> FLoadingScreenAttributes LoadingScreen;
> LoadingScreen.WidgetLoadingScreen = LoadingWidget->TakeWidget();
> 
> ```

Thank you TheJamsh for this tutorial!

I tried making a UMG work on the loading screen. First I call CreateWidget before setting the WidgetLoadingScreen and set it using the TakeWidget() function and somehow crashes package build. and Ideas why it does this?

Thank you so much.

---

<div class="post-metadata">

**Author:** ![anonymous\_user\_991b770a](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@anonymous\_user\_991b770a](https://forums.unrealengine.com/u/anonymous_user_991b770a)\
**Post date:** [February 25, 2020, 5:29pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/69 "2020-02-25T17:29:05Z")

</div>

Would it be possible to update it to 4.24.3 engine version? I’ve tried using it in a project on this version of the engine and it crashes.

---

<div class="post-metadata">

**Author:** ![AKA\_The\_Boss](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@AKA\_The\_Boss](https://forums.unrealengine.com/u/AKA_The_Boss)\
**Post date:** [March 19, 2020, 7:56pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/70 "2020-03-19T19:56:54Z")

</div>

Thank you very much.  
I have a question: Where do I add the Bounses section, in the .h or .cpp of my custom gameinstance? ( I’m guessing .h)  
+  
the bounses section gives a lot of error when I copy and past it in the .h file Using 4.24

---

<div class="post-metadata">

**Author:** ![FlashTrance](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/flashtrance/32/730424_2.png) [@FlashTrance](https://forums.unrealengine.com/u/FlashTrance)\
**Post date:** [March 22, 2020, 9:48pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/71 "2020-03-22T21:48:01Z")

</div>

> [@AKA\_The\_Boss](#):
>
> Thank you very much.  
> I have a question: Where do I add the Bounses section, in the .h or .cpp of my custom gameinstance? ( I’m guessing .h)  
> +  
> the bounses section gives a lot of error when I copy and past it in the .h file Using 4.24

You don’t need to paste it anywhere, he’s just showing you what the “FLoadingScreenAttributes” struct contains. You already have access to the struct members as long as you included the MoviePlayer module.

So if you wanted to make movies unskippable, for example, you could use your FLoadingScreenAttributes object (which is called “LoadingScreen” in his example) and say “LoadingScreen.bMoviesAreSkippable = false”. Or if you wanted to change the MinimumLoadingScreenDisplayTime to 5 seconds, you could say “LoadingScreen.MinimumLoadingScreenDisplayTime = 5.0f”.

---

<div class="post-metadata">

**Author:** ![jwatte](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/jwatte/32/744941_2.png) [@jwatte](https://forums.unrealengine.com/u/jwatte)\
**Post date:** [July 2, 2020, 11:07pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/72 "2020-07-02T23:07:22Z")

</div>

I’m doing something much like this, but I use a blueprint User Widget instead of a movie player.  
I do this by using a multicast delegate that I bind to in a blueprint subclass of the custom C++ game instance class.  
I also use the “sync streaming world load” function to make sure the world composition level is loaded before the player begins playing, so they don’t fall through the terrain.  
I know that the right functions are called and that the widget is being created, because I PrintString() and it shows up, but the loading screen is all black, at least when using “play standalone.”  
It’s as if either, there is a default black loading screen that goes in front of the widget I add, OR the widget doesn’t actually get drawn/refreshed before the world-load-sync happens and thus it never paints to the screen.

Has anyone seen this? Any suggestions? The way it goes is:

C++ GameInstance:  
Create two multicast delegates for pre-load and post-load notifications.  
In Init() -\> Bind:  
FCoreUObjectDelegates::PreLoadMap.AddUObject(this, &UScapesGameInstance::BeginLoadingScreen);  
FCoreUObjectDelegates::PostLoadMapWithWorld.AddUObject(this, &UScapesGameInstance::EndLoadingScreen);  
BeginLoadingScreen, EndLoadingScreen functions:  
If not in dedicated server, call the loading screen delegates.

Blueprint GameInstance:  
Init() -\> bind pre-load, and post-load delegates to events  
Pre-load bound event: create user widget instance, add to player screen (or to viewport, same outcome), print log message  
Post-load bound event: remove the user widget instance, print log message

I see the log messages, and in the file, they’re a few seconds apart, so I don’t think it’s “being created after the blocking level load.”  
So how do I get this to render as soon as it’s added?

---

<div class="post-metadata">

**Author:** ![slavensb](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@slavensb](https://forums.unrealengine.com/u/slavensb)\
**Post date:** [March 23, 2022, 4:10am UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/73 "2022-03-23T04:10:07Z")

</div>

Links to the wiki are broken, Epic recently moved the community wiki url to a new one. Links are all now sent to the landing page for UE forums

---

<div class="post-metadata">

**Author:** ![Gixo](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/gixo/32/888506_2.png) [@Gixo](https://forums.unrealengine.com/u/Gixo)\
**Post date:** [November 13, 2022, 3:56pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/74 "2022-11-13T15:56:17Z")

</div>

A bit late, but here is the link if anyone needed it:

> **[Loading Screen | Unreal Engine Community Wiki](https://unrealcommunity.wiki/loading-screen-243mzpq1)**
>
> In this tutorial I'll show you how to properly setup a self-contained Loading Screen System for your game - which will allow you to safely play movie files, audio clips or load a widget to the screen during any type of map loading.

---

<div class="post-metadata">

**Author:** ![DEV7591](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@DEV7591](https://forums.unrealengine.com/u/DEV7591)\
**Post date:** [January 17, 2026, 8:45pm UTC](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993/76 "2026-01-17T20:45:19Z")

</div>

Thanks for the restored link good sir.

Epic’s stupidity never ceases to amaze me.

[Previous page](https://forums.unrealengine.com/t/seamless-proper-loading-screens-play-movies-audio-animated-widgets/50993.md?page=3)
