(Cover art on Frontpage by Dilay Erol)
If you’ve ever had the opportunity to play a version of Lumini, you might have noticed the lack of loading- and cutscenes. That’s because we want Lumini to be a game of uninterrupted movement. The swarm behaviour, one of the most significant features of the Lumini experience (as described in our previous blog which can be read here), creates a sense of calming, flowing motion.
Another important part of the game is the world and the way it’s constructed and loaded. To ensure the uninterrupted movement, the world must be continuous; which to us means no loading screens or other gameplay interruptions while going from one world (or scene) to another.
Last year we released a Lumini demo for marketing and testing purposes which was roughly the same size as the first world in the current build of the game. The entire demo was made in one Unity scene, a very, very big Unity scene. As a result, the initial loading from the main menu to the game took way too long. Adding more content the same way would be madness!
In previous Unity projects we’ve used multiple scenes, but for Lumini that wouldn’t work: when going from one scene to another, the game would be paused before entering a new scene and the player would be spawned in a fixed position. If the player decides to immediately turn around and fly back, the game would be paused again while loading.
So for the full game we are using a Unity pro feature called LoadLevelAdditiveAsync. This feature allows us to load a new part of the world in the background (Async) while playing the game. When the player passes through certain trigger points, a new part of the world is loaded in the background and then added to the current scene. Technically, the game is made in different scenes (one scene is about the size of ¼ of the demo), but they are glued together at runtime.
When a new scene is added, an older one will be deleted. This way we make sure that no more than 3 scenes exist in memory at the same time. The process of deleting an old scene is spread out over multiple frames to avoid lag spikes. We’re always monitoring the loading process with the Unity Profiler to avoid lag while loading and deleting scenes.
The world of Lumini is continuously expanding with new environments, creatures and types of Lumini. We are putting a lot of time and effort into making it a lively and believable world. Next time we’ll tell more about the process of constructing the world itself. We will answer questions such as ‘How are the assets made to build the environments?’ and ‘What tools were used?’.
- Niels Koopmans
(Follow Niels on Twitter @Niels_Koopmans)