Truong Bui - Async Loading Screen

Are you looking for a loading system without Level Streaming? If yes, then you already found GOLD :)

Usually, you have to use Level Streaming for loading screens because the User Widget is destroyed at level transition, and level loading runs on the main thread, which blocks any other game activities until it's completed. So, you will need to manually control which object is loaded/unloaded. Also, you can't use different Game Mode and Player Controller for each level, and sometimes there's still occasional freezing.

That said, you may need to change your game logic to fit with the Level Streaming mechanic, and it requires a lot of work to achieve a simple thing: Add a Loading Screen. To create a custom loading screen without Level Streaming, you must do it in Unreal C++. However, this is a challenging task for artists and designers, even for developers unfamiliar with the Slate framework and engine module code. Async Loading Screen plug-in comes to a savior.

Async Loading Screen allows you to easily configure a Loading Screen System in the project settings and automatically adds a Loading Screen whenever you open a new level. It also comes with pre-designed UI layouts and default icons, making it easy to customize your loading screen in a few minutes.

Awesome plugin, I’ve been using it for my own game RNPS (which I’ve released on Steam), the only major drawback is that I could never get it to compile for Linux, meaning I’d have to disable the plugin to compile for it. It isn’t a major issue, however it is something I hope you can look into

ASL plugin compiles fine with Linux. However, you need to add the ASL plugin as a project plugin to recompile with your game project.

Hi, it does technically compile on linux but the initial loading screen mp4 and other loading screen textures do not appear while playing, at least I can 100% verify this when using the steam deck (which runs linux natively). No errors or issues with windows builds however.

One strange thing is that I noticed if I play the game long enough on Steam deck, let’s say 20-30 minutes, the loading screens start working eventually. Is this some linux caching issue that I could fix somehow by manually force loading the initial loading screen video and subsequent loading screen textures?

Maybe it’s due to the texture format. Make sure you change the texture settings, follow this note:

Unfortunately, I have already configured everything exactly as stated in the docs and verified that it all works 100% perfectly with Windows. The issue is only with linux, have you been able to get loading screens (initial video mp4 and images) to work in a compiled linux build or is this officially unsupported? Unfortunately, I will have to switch to a different solution if Linux is not supported.

Which engine version are you using?

have you been able to get loading screens (initial video mp4 and images) to work in a compiled linux build or is this officially unsupported

Yes, many games have been shipped with ASL on Linux before. ASL officially supports Linux. But please note that the ASL plugin depends on the MoviePlayer module. Hence, most of the time, there are issues related to either MoviePlayer or the Engine itself, not the ASL plugin.

I have updated ASL to UE 5.7.0. You can download it on GitHub or just wait a few days for it to be available on the Fab market.

I love the plugin so far and how easy it is to use. Just one caveat - I’m using level streaming volumes with a master level and the plug in loads in LV_Master, but doesn’t take into consideration sublevels & where the player is standing, is there a way for it to check that before closing the load screen? On slower loading machines players tend to fall through the world. I have a workaround but would love if there was a way to do it with this.

I currently have each level set up to check if it’s loaded, then tell the player to enable movement, I think I could also tell async to "finish loading” in that same logic, right?

Unfortunately, you can’t check this logic while the ASL is still running. Any logic belongs to Level Streaming have to be done in the game thread, after the ASL closes.