SPUD / Save Games
To handle SaveGames and Persistence in Level Streaming, SPUD is used. The WB_CustomSaveLoadScreen used in the Main Menu is largely based of the SPUD Examples SaveLoadScreen Widget.
Most Variables are passed to the GameInstance, which is especially important for variables that need to exist before the game is loaded, e.g. on the initial Main Menu Map.
Saving the GameInstance with SPUD via BP should’ve been be very straight forward, but I was stuck there for multiple days. Eventually I opened up a Github-Issue and it was confirmed that the SPUD Subsystem is not ready on Event Init of the BP GameInstance. I went on implementing going the C++ way, but a delay until the Subsystem is ready should fix that.
Pulling Actors into the persistent Levels
As a lot objects in VR are interactible and can therefore easily be moved by the player, it’s possible that movable objects leave their streaming level boundary and get despawned when their owning level is unloaded. We have to possibilities to fix that: Having all those objects on the persistent level by default, which isn’t ideal from an optimization perspective, or move them to the persistent level when the player actually interacts with them. From my knowledge, there is no proper way of changing the owning level at runtime but destroying and respawning the actor, which isn’t always ideal.