Loading Screen System (Level Transitions w/ Progress)

Ok, I think I found the problem! After a couple of hours of trying to isolate the problem, I remembered a setting I changed in this project awhile back that I had forgotten about. I’m just posting this in case it helps someone else as well. I went to Project Settings -> Engine Section -> Streaming and set the “Use Background Level Streaming” to true (i.e. check the option). For some reason I had set that option to false when I was trying to debug a performance issue.

That explains why even when I used your default levels that came with the system it wasn’t working either lol. That’s kind of a facepalm moment, but I’m glad I at least found it.

The level transitions are working now. However, I have a feeling I’ll have a lot more questions for you in regards to spawning the default pawn, but this particular issue is resolved. I am very happy now :slight_smile: Thank you.

Glad it worked.

Let me know if you have any questions.
To get started, here’s the documentation on Pawn Handling and Map Settings.
Additionally, example map number 15 is dedicated entirely to all aspects of those features (per level setup, settings override on level transition (via portal actors), Pawn Persistence / Actor Pool (i.e. using the current pawn in the destination level and/or in the transition scene) etc.)

Hi,
Any idea why i can’t see LSS_Loading… folder in my project.
The plugin is active and “show plugin content” is checked in view options.

Thanks.

The “LSS_LoadingScreenSystem” folder is part of this blueprint asset:
https://www.unrealengine.com/marketp…-screen-system
While the code plugin you might be referring to (available here) is a small utility meant to expose functionality to BP that allows the above blueprint system to query progress of levels that are being loaded (otherwise only available in C++).

You would need both for the full set of features, though, the plugin is optional - the blueprint system will work without it (but won’t be able to display a loading progress).
You could also use the free code plugin on its own to read progress of streaming levels in your project - I intend to release an example project in the community section, but have yet to find the time.

The Loading Screen System is fully compatible with the recently released 4.21 version of Unreal.
I have also updated the free companion plugin for the new engine version.

Video: Plugin Installation Guide

I assume, the Survival Game Kit spawns a pawn which is set up in the Game Mode. The way it works by default is, the game will spawn that character (at PlayerStart or at the 0,0,0 coordinate) at the very start of the game. This will not work with level streaming / loading screen, without some adjustments (the game would just spawn your character in empty space before the loading screen even starts to load your actual game level).

The Third Person template, on the other hand, has a character placed in the scene, with its “Auto Possess” (details panel) set to “Player 0”. This setup will work correctly, as the game possesses that character for you as soon as it gets loaded.

You should be able to do it this way with the template you are using - place the character it is using (you can look it up in the Game Mode -> Default Player Pawn Class) in the game level (make sure the correct sublevel is active), select the character, then in its Details search for “auto possess” and set it to “player 0”.

**More advances Setup: **

Since the last update, LSS now has options aimed at making pawn handling more streamlined and easier to use. Prior to that, you were able to place your character in the scene or spawn it from blueprint using a wealth of exposed event bindings, though the former is very limited while the latter is not all that straightforward and requires delving deeper in more advanced event handling.

The Pawn Handling feature provides full control over Spawn Location and Pawn Type in Streaming Levels, as well as an Actor Pool to keep the active Pawn alive between and during Level Transitions.

Please refer to this documentation for a full overview of how the Pawn Handling system works and how it is set up. In essence, you will be able to define what type of pawn to spawn in each sublevel, define the starting position (you can choose to spawn at a location, at PlayerStart or at any other object - by Class, by Tag or by direct reference) - you can also share pawns between levels and keep them alive when the sublevel is not currently loaded (see “Actor Pool”).

Refer to map "15_PawnHandling_Map” for examples.
Here’s a HiRes Preview Screenshot of that demo level with description showcases:

https://i.imgur.com/Pnw0HcX.jpg

Thank you for the detailed instructions. I will test when I get a chance :slight_smile:

You are welcome, let me know if you need anything else.

I’m in need of a better explanation for how to use this with world composition. I have a very large open world and Ideally what I would like is to play a mini game while the world loads. I got this working in all my non world comp levels in my other game mode, but now I need to implement this to the world comp level.

So my best guess based on what I’m reading is to drop and LSS actor into my already set up world comp map since the root is empty and then all the tiles are levels. My question here is how do I check if the surrounding area has been loaded? The player won’t always spawn in the same space nor am I aware of a way to check what levels World Comp is trying to load.

Would it be better to set all levels to default invisible and then make them visible when the player is in range somehow? I could think of a way to do that with an actor perhaps, but this is all speculation. I would like to hear the suggestion for how to set up with world composition if you have it figured out already.

The system is not set up to hook into streaming activity performed by external means / other modules - it does not check what levels World Comp is trying to load.
Right now, you would have to provide the LSS with a list of particular levels - this would work even if World Composition initiated the loading (as LSS would still check progress of all selected levels). But, as you pointed out, that isn’t exactly practical with a WC setup, as you don’t know which levels are relevant.

I have an idea for such functionality, that would allow the LSS to monitor any and all streaming levels for loading activity and provide a loading screen accordingly. For World Composition, this, of course, would only make sense for the start of the level (or after teleportation, e.g. fast travel), but not for any seamless loading that would occur based on distance while the character is moving around the world.

I’ll figure something out after I’m finished with the current update (Replication) and, if feasible, will add it as a next update.

Hi, I brought this a while ago hoping for MP support and it was a WIP you may get asked this lots but when we spoke previously you said I could test. I was just wondering how it was all coming?

Hey Smartay,

I have the core system replicating fine at this point and everything set up with two usage examples (lobby, char selection, game level - one setup as a shared level and one using ServerTravel). Some of the extra parts, such as settings modularity, actor pool and per-player settings still are not where I want them in a published build (basically all the extra features and freedom of approach that I built in, comes back to haunt me with a ton of extra work). I’m trying to author it to be as easy to integrate on the users’ side, as possible and also to not interfere with any existing setups.

It’s taking much more time than I initially anticipated. I can’t provide a time estimation but am hopeful it won’t be too long at this point.
If you are interested in early access, just drop me an email or PM and we’ll coordinate further.

Hi, I’ve encountered a bit of an issue. I’m trying to load a level that uses world composition. I’m not sure how I would go about this. I have a persistent level into which I added the gameplay level, however when I try to load it through the LSS Load Level function, with map settings that have the name of the level set (Tried both with adding the child compositon level names to the sublevels list, this resulted in unable to load errors, and without) however while I do load into the level, none of the world composition sublevels are loaded in. I presume this has something to do with the way WC levels use distance streaming, but I don’t know how I would fix this.

World Composition will load and unload levels seamlessly based on distance. In order for levels to be loaded by Blueprint instead, those would have to be assigned to a World Composition layer with “Streaming Distance” disabled. These levels would not get loaded automatically by the World Composition and would require to be loaded by Blueprint (e.g. by the LSS).

(Some further information in regards to World Composition can be found in this post)

Right, I understand this, I don’t mind the fact that the levels are loaded by streaming distance, but what I would like to do, is just have the LSS system load my world composition level through the loading screen, and the let the level streaming handle the rest. I don’t need the LSS to do anything with the streamed sub-levels. What happens now, however, is that the LSS loads in the parent WC level, but the sub-levels don’t even appear at all.

How are the sublevels set up in World Composition? Are they assigned to a Layer with “Streaming Distance” enabled or disabled?
If assigned to a layer with that setting enabled, WorldComp should load these levels once their bounds are within the distance set.
If no streaming distance is set/enabled, the levels will wait for blueprint execution.

Could you elaborate on the errors you are receiving? A screenshot would help.
(i.e. “when I try to load it through the LSS Load Level function, with map settings that have the name of the level set …] this resulted in unable to load errors”)

  • Please check, if all levels are spelled correctly and more importantly: are listed in the “Levels” tab of your root level (this goes for the loading screen scene as well).
  • Do you have a settings file for the loading screen scene, too?
  • Make also sure “Use Map Settings” is enabled on the LSS Actor.

The LSS should load all levels specified in the Settings file, including sublevels, regardless of their World Composition settings.
Levels not listed in the settings won’t be affected at all (i.e. World Composition setup applies and should load any distance based levels).
Note, that if you were to list all your levels in the settings file, including sublevels, all should be loaded (behind the loading screen), though some of them might immediately get unloaded again by World Composition based on distance (I haven’t run explicit tests if that could unload a level midway while it still loads, but I doubt it is the case).
Keep in mind, that if you only load the gameplay level through LSS, but not your background levels, those level might still not be loaded once the Loading Screen closes.

This is precisely the case, however, I’m having a hard time finding any info on show a sublevel of a sublevel, so I’ll try to ask elsewhere in the UE4 forums whether there is an actual way to do so.

hello, I have followed the video tutorial to the T and it will not work for me i have no idea what im doing wrong

Not exactly sure, what you mean by that.
For World Composition you have to have all maps you wish to use, placed in the same folder (or subfolders thereof) as the root level. WC will add all these maps to the level tab automatically (and you can’t add any manually, as you could with WC off).

Could that be the issue here?

Don’t worry, we’ll figure it out together - though, I will need a little bit more information from you. Are you experiencing any error messages, by any chance? Is nothing happening at all or what is the current outcome?
​​​​Could you post a screenshot of the settings in the LSS Actor`s details - and your levels tab?

​​​​​​Make sure the LSS Actor is placed in the root level and your sublevels have streaming method set to “blueprint”.