I set up the levels, the persistent level and the level I want to stream.
Player or players start in persistent level, and I have a level streaming volume in that level which will trigger the second streaming level.
The second streaming level has a single AI bot in it.
Issue 1: No matter what I set the level streaming type to, when I leave the volume, the streaming level unloads, and the AI bot is reset. So if i kill the bot, step back out of the streaming volume, and back in to it, the second level is fully reloaded and the AI bot is alive again.
I had expected SVB_VisibilityBlockingOnLoad to allow for only changing the visibility of the second level, but it does not. It fully reloads it on the server, rather than just setting loading and visibility on the client.
If I set up my own volume and stream by blueprint, for a Dedicated server…I can get the behavior I want where the server always has the levels loaded, and I can tell the server to make it not visible on the clients. This fixes the issue with the AI and the level in general are reloading. I can kill the bot, back out of volume and watch level hide, go back into volume and see dead bot.
Issue 2: If I want to use level streaming by blueprint on a non-Dedicated server, I always have to keep the level loaded on the host client, or there are some bad artifacts that occur when changing visibility on the client host. So the client host has to have everything loaded AND visible and the other clients can stream appropriately.
It should be that the host client should be able to at least toggle visibility of the levels, but it cannot safely do this. Toggling visibility of the levels on a host does more than change just the visibility, it seems to affect ticking and perhaps replication.
Ideally level streaming should:
-
Allow for turning off visibility only ( render ) of streamed ( loaded ) levels, and allow for things continue to tick and replicate properly even though they are hidden
-
Allow for 1) above on a non-dedicated host. Ideally the client host should be able to not render those streamed level elements it doesn’t need to render, even if it needs to have them loaded.
-
Level Streaming Volume type SVB_VisibilityBlockingOnLoad working such that it only affects visibility on the clients rather than forcing a reload also on the server. Or some additional type option that does this.
If anyone has workarounds for any of the issues I have mentioned, I am all ears.