Loading Screen System (Level Transitions w/ Progress)

Hey Elijah,

“Loading Screen Level” and “Min Duration” are two of the many properties of the LSS Actor, I don’t quite understand the question - could you elaborate?

One issue I can think of is that with the last update, most of the properties were moved into categories and therefore could look different to you at the first glance when for example following the video tutorial. In that case, make sure to expand those categories to find the properties:


Note: These subcategories will only be used if “Use Map Settings” is disabled, otherwise the system will read any values from external settings files.
The two properties called “Level to load on Play” (optional) and “Loading Screen Scene” are such setting files. They can also be loaded with the Blueprint Node “LSS Load Level”.


To learn more about how to use “Map Settings” files, open example level “15_PawnHandling_Map” or read about it in the documentation here.

I want to Open a level using LSS Open Level node. I want my Sequencer movie to play and once finished Open Level. I have all my levels in Layer Panel. The Sequencer Movie is in the Demonstration Map and once done Open the SomerSetNew Map. Let me know if my level Blueprint is right or not. My LSS Actor is also in Persistent Level Thank You

Hey lafilmcompany,

I assume, the first screenshot depicts the Level Blueprint of the map called “Demonstration” and this level is being opened from the game’s menu level (“OZI_Menu”, which would be opened by LSS on start due to Autoplay enabled).

The “LSS Open Level” node in the screenshot has “Level1” as parameter, not “SomerSetNew” - is this the place you want to open “SomerSetNew” or is “Level1” an unrelated sublevel?

Keep in mind, the “Play” node is not a latent action, i.e. it will not wait for the sequence to conclude - it will run anything to the right of it immediately (“LSS Open Level” in this case). You would have to add a custom event to the sequence, or bind an event (see below) - or set a timer to call the node after the sequence).

I have used an unrelated screenshot here, “LSS Open Level” would go where the Print String is in the image above (i.e. ignore the “quit game” stuff).

Ok I tried to recreate what You did in pic above. My Blueprint is not working. here is what I did. I added Events in my Sequence like in pics. I created two custom events in my Level blueprint based from the Events in my Sequencer in the Event layer. OziPlay at the beginning event and Somerset for the ending event on the Sequencer timeline.

My Sequencer wont play when I start the level. Do I need to check “Auto Play” on Sequencer Details box or do I still need to connect “Event Begin Play”? Or should my Custom Event Trigger Play when Level starts?

I also created my “Bind Event to Onfinished” from my Sequencer Player pin.

Thank You for Your Help.

As far as I can tell, what this would do, is restart the sequence over and over again.
The “PlayOzi” event, which starts the sequence, shouldn’t be called from within the sequence.

Either of those should work.

You should use one of the options, either “Bind Event to OnFinished” or the “Somerset” custom event from the sequence’s event layer. Not both.

You’re welcome.

All worked well. Have a quick question. I want my blueprint to open another level that is not inside the Level Streaming. What node should I use instead of LSSopenlevel?

If you want to load a completely independant level (outside of your current persistent map that is), you would use the common Open Level node provided by UE4 (this will unload the currently loaded world). To still be able to have a loading screen during that transition, that destination level would have to be set up for level streaming as well, i.e. have a persistent level “shell” of its own (with just its LSS actor) and the actual level plus a loading screen scene as sublevels.
The two (persistent) levels won’t share the same LSS actor nor the loading screen scene, but the observable effect will be the same.

This type of transition is showcased with example map no 11 ("\Content\LSS_LoadingScreenSystem\Maps\11_OpenLevel_Map"), including a fade out during that transition (before the Open Level node is called).

In other words, the second level would have to be setup with a “startup” loading screen, as seen in this video:

Hello, I am considering purchasing your loading screen system, however I had some questions (I am somewhat new to UE4). I am using world composition for my main level, so my main level is currently the “Persistent Level” and it contains about 4 “sub-levels”, if you will, that are basically landscape levels attached to my main level landscape.

I also have a “StartMenu” level, which is loaded as the very first level in an actual game build (when actually playing the game). From this StartMenu level I have a button that loads my “main level” (which is the persistent level with the 4 sub levels) mentioned above.

My main concern is that my current main persistent level (with the sub levels underneath) will somehow NOT work with having to use a “root” persistent level with your system.

So, my question is would your loading screen system be able to work with my current level setup somehow? Would I add my “main persistent level” as a child of the “root” persistent level as shown in your video tutorial on YouTube? Can a persistent level be a child level of another persistent level? And would I also add my “StartMenu” level as a child of the “root” persistent level? Could I still use my StartMenu level as the first level loaded upon game startup?

My main goal is, when the game starts, to have my StartMenu level load. Then when the player clicks on a button on the StartMenu level, it goes to a “loading screen/transition” level which then loads my main level with all of the sub levels (world composition level).

Sorry for all of the questions, but I’m still trying to learn and wrap my head around how UE4 works. Thanks for any help or information you can provide.

In regards to the “Start Menu” level, you would have two options.

  1. You can leave it as a completely separate level (set up as in the video example, with its own root level and LSS Actor), whereas your “Game” level would be a second entity set up in the same fashion. The LSS can then go between two such levels (there is an example for that in the project).

  2. The preferred way however is a single-root setup, with one shared root level, one LSS Actor and in your example, the “Start Menu” and “Game” maps as sublevels.
    In this case, the LSS would switch between your levels with the option to keep the currently unused levels loaded (hidden) while the others are active (e.g. Pause Menu). It would also allow for the Loading Screen scene to be kept in memory (immediate access) as well as the use of the same pawn through level transitions without the need to save+despawn, and respawn+load (i.e. if you went from one game scene to an entirely different one, the pawn could be shelved during loading and teleported to a location in the new level - you could also keep the pawn in the loading screen - or load a different pawn at any time: here’s the doc for the Pawn Handling feature).

With minor adjustments, it should work fine. Your two possible setups would look like this:

**Option 1 **(Menu and Game Level separate)

  • Root level with LSS (no geometry etc.)
    – Sublevel (Menu Scene)
    – Sublevel (Loading Screen Scene)

  • Second Root Level with second LSS Actor
    – 5 Sublevels (your current root level + the 4 sublevels)
    – Sublevel (Loading Screen Scene - can be same or different than in the other level)

Option 2 (all in one)

  • Root level with LSS
    – 6 Sublevels (your current root level + the 4 sublevels + Menu Scene)
    – Sublevel (Loading Screen Scene)

The idea is to keep the root level as lightweight as possible - if your current root level has objects, a landscape etc. you would use this level as a sublevel of basically an empty new root level that has only the LSS Actor in it.

To go between your MenuScene and the Game Level you would:
In option 1 - call the default OpenLevel node. The LSS Actor would do the rest in each of the levels.
In option 2 - use a LSS specific node to trigger the transition: “LSS Open Level” with the name of the MenuScene or “LSS Open Levels” with an array of the names of your 5 levels.

Or, if you use a config file setup (optional way to control transitions, introduced with the latest update), you would only call “LSS Load Level” and select either the config file for the MenuScene or for the main GameLevel (this config file has a list of child levels that would be loaded with that level).

In Unreal you can have only 1 step in level hierarchy, i.e. a sublevel won’t have further sublevels. What you can, however, do easily in this instance, is adding your main level and its sublevels as sublevels of the new root.

Then, in the Loading Screen System you would load a group of levels in one go (the loading progress will take that into account as well). As mentioned, you even get a config file for levels (this is optional, i.e. there’s a couple of ways to do most things), where you can specify a list of child levels - in this case all you have to do then, is tell the LSS to load that one level and it will automatically load any linked sublevels.

In regards to **World Composition, **in particular, the level(s) that would have to be loaded with a Loading Screen would have to be assigned to a layer with “Streaming Distance” disabled. Those levels would not get loaded automatically by the World Composition and would require to be loaded using blueprint nodes (i.e. by the LSS).
LSS doesn’t query the World Composition system and is therefore not aware if it is loading any levels automatically (there wouldn’t really be a point doing so, as the automatic World Composition streaming is mainly supposed to happen seamlessly).

If you went with option 1 or didn’t need to have World Composition load levels based on distance, there would be no issues with either approach (i.e. separate or shared root).

Otherwise (i.e. with option 2 + distance based World Composition) you would probably have to place your Menu Map outside the bounds of anything that World Composition would load based on distance, or in such a way that those levels wouldn’t interfere.

My concern is, while the main level would be easy to load with a loading screen, LSS will not be aware of any sublevels that World composition will stream **automatically **based on distance, so you could end up with the main level loaded but the background sublevels still loading.

You could, however, run your own checks for these levels and keep the Loading Screen up until these levels have finished loading.

Though, if your levels are *not *set to load based on distance (i.e. you load them through LSS when transitioning to the game level), everything would work fine.

Can you elaborate on how your levels are set up in World Composition?

PS: Don’t hesitate to ask me to delve deeper into any of the above if something is unclear, I know it’s quite a lot to take in, and might be overwhelming. Btw. I’m very approachable with hands-on support: if you run into any issues during implementation, I’ll be there to help. There’s also a documentation and most importantly, more than a dozen example/tutorial maps in the project -> here’s a preview of one such: Link

The LSS is scheduled to go on sale tomorrow.

Thanks for the information Cpt. Trips. I will go through and see if your suggestions work. I’m not sure when I’ll be able to do it, but I’ll let you know if I run into any problems. That is great the system is going on sale tomorrow. I plan on picking it up for sure :slight_smile: Thank you very much. I hope I can get it working myself, but we’ll see.

Hi Capt. Trips,

So I decided to work on trying to get the loading screen system to work today, and unfortunately it’s not working all the way like it should. The best I can get so far, is when I hit play on the root scene, it starts the transition level (and I get cog wheels spinning in the upper right corner), but it never loads a level. It just stays spinning and nothing ever loads.

I have a “BP_LSS_Actor” in my root scene. At first I tried it with 2 maps (as in your example documentation), one main game level and a “StartMenu” level. So I had two levels in the array on the LSS Actor, and the name of the transition level in the “Loading Screen Level” option on the LSS Actor. This is the setup that loads the transition level on play, and the UI cog wheels spin, but no levels load.

So, I tried to simplify the process by creating a new root level. And under this level all I did was add the “Minimal_Default” starter content level and the transition level I created. Then in the LSS Actor on this new root level, I only added the “Minimal_Default” level in the array, and the transition level in the Loading Screen Level option like above. When I hit play with this setup, my default pawn from my game mode gets loaded in the transition level, but I see no cog wheels spinning…… and again no levels load at all (i.e. the Minimal_Default level does not get loaded like I think it should).

Per the documentation, I did try to make sure all of my levels to load had a default pawn with Auto Possess Player -> Player 0, set in the pawn details.

I should also mention that the very first time I tried all of this, I accidentally tried to play the transition level without having set the LSS Actor level names properly, and the Editor crashed. I’m not sure if that affected anything…but I don’t think it would. I am using Unreal Engine version 4.19.2 right now, just in case that’s needed.

Can you think of any reasons why the levels set up in the BP_LSS_Actor would not load at all? Maybe I am missing something. Also, I noticed that when I place levels in the “Levels” window under the root scene, I think it loads all of the actors in all of those levels into the root scene for some reason. Is this expected behavior?

I don’t have a deadline, so it’s no huge deal, but would love to try to get this working. Thanks for your time and any information. :slight_smile:

Make sure the streaming method is not set to “Always” on the sublevels (right click each level in the “Levels” tab -> “Change Streaming Method” -> Set to “Blueprint”).

Otherwise, the levels will indeed load just as if their content was in the root level.

Hmm, when I looked at that option for all of my levels they were already on the “Blueprint” option. I re-clicked on Blueprint anyways just to make sure. The other scenes actors are still in the root scene though. Should I delete all of them except for maybe the “BP_LSS_Actor”? No levels are loading though still.

Ok I just thought of something. I saw in Tutorial video that you’re supposed to check “Start Players as Spectators” in the GameMode blueprint. I did this. But every time I do it, the game crashes when I try to play the root scene. It crashes every time. If I “uncheck” that option, it can play the level. I don’t know why “Start Players as Spectators” crashes the editor every time though.

In terms of the Editor viewport, you will see all actors of any levels that are currently set to visible, this is normal and would have no bearing on any streaming functionality. Click on the “Toggle Level Visibility” Eye Icon to the left of the level name to check if the actors are in the correct level(s).

The cogwheels appear only if there is something delaying the transition - this could be an intended latent action requiring confirmation (something that would have to be set up, therefore not relevant in this instance) or the transition scene still loading (make sure this sublevel’s streaming is also not set to “Always”).

On a side note, the default pawn should be deactivated (Set “Start Players As Spectators” to true in Game Mode) - otherwise the game will spawn that pawn in the root level automatically (and you might simply start falling through the world, as no levels might be loaded at this point).
The Pawn Handling feature (example map 15) will allow you to take full control of what you want to spawn, but for the time being, Auto Possess should suffice (i.e. in the game level as well as in the transition scene).

Could you show me a screenshot of your setup - levels tab and the main settings of the LSS Actor (level names)?
Are you starting the level transition from a blueprint node or the auto play setting in the LSS Actor’s details?
Check that any sublevels (including the transition scene) are set to not be initially loaded/visible (click on the “Summon Level Details”).


That’s odd. Does this happen in a blank project also?

Ok, well I switched my game mode to using your default game mode (BP_LSS_ExampleGameMode), and I see that it has the " Start Players as Spectators" option checked. When I tried playing the root scene with this game mode it didn’t crash, which is good, however it still didn’t load any levels, and just gave me the cog wheels spinning in the scene again.

I did this. I’m currently only testing with the Minimal_Default level and your PongGame_Map transition level. I checked that option on both of them and it’s off.

Here is a picture of the settings. Let me know if you would like to view some other settings or not:


I am going to try testing this in a blank/default project and see what happens, and I’ll let you know. I don’t want to keep you having to check back here all day today, so I think after this comment, I’m going to simply try working on this some more some other time (maybe tomorrow, but maybe later in the week).

If you’d like to respond to this you can, but you don’t have to keep checking back anymore today though. I’ll work some more on this tomorrow or later in the week. :slight_smile:

Ok, just an update. I tried the system in another project I’m working on, and it works perfectly! Which is excellent. The levels load and the default UI works and everything, which is very cool. So it’s definitely not something wrong with the asset itself. :slight_smile:

But it’s really unfortunate that it doesn’t work in my current main project. I have a feeling it has something to do with the fact that I already had a root/persistent level setup, and that I was using world composition, or possibly both. Plus it’s a fairly large project with c++ code and settings that I can’t even remember everything that I’ve changed, which doesn’t help. The game mode I was using crashing the editor whenever I use “Start Players As Spectators” is very weird as well.

I had a backup of the project it’s not working in, so I’m going to retry installing the LSS system again, into a fresh copy and see if there’s some configuration I can use that will make it work somehow. One thought right now, is there some way to make my current persistent level (with the sub levels) NOT be a persistent level anymore. I guess, to put it another way, is there a way to un-sub-level the current sub levels? Just a thought.

Thanks for your patience. I’m glad I’ve narrowed it down to the problem just being with my one project for now.

Right click any level in the Levels tab and select “Remove Selected”.

Keep in mind, though, that the sublevel hierarchy exists in the currently opened level only - it doesn’t affect the sublevels themselves (if you want to use those without the current root level).
Example - you start out with LevelA that has LevelB and LevelC as sublevels. Then you create a new level, LevelD and make A-C sublevels of that new level.
The first setup will not be invalidated, it will just not be relevant while in LevelD.
You can go back to LevelA anytime, and it will still have B and C as sublevels.

A “persistent level” is always the topmost level, i.e. the one you open in Editor or have active in game (Start Map or anything opened with Open Level).

One thought about that - in your minimal test setup, either disable World Composition temporarily or make sure the sublevels are assigned to a layer in World Composition that has “Streaming Distance” disabled.

Also, add a print string to Begin Play of the sublevels and check if the levels get loaded in your setup (even with LSS Autoplay disabled). One possibility is that World Composition is already loading your levels.

You’re very much welcome.