Well, basic setup of desired configuration can be achieved quite easily in Unity.
SceneManager
class has nice methods: LoadSceneAsync and UnloadSceneAsync. They are loading/unloading scenes in the background and provide convenient callbacks when scene loading is complete; you can initialize more than one scene like this:
SceneManager.LoadSceneAsync("DesiredSceneName", LoadSceneMode.Additive);
This way already loaded scene stays untouched and the second scene is loaded in additive mode. If there are more than one scene initialized, all GameObjects from all scenes are displayed. You have options to Merge Scenes or to Move GameObject from one Scene to another. DontDestroyOnLoad is also nice for objects continuously traveling between scenes.
So the game world is split into different scenes, which are loaded in background and seamlessly linked together. How to arrange scenes loading/unloading is up to you:
- You can set up triggers near scene borders, which start loading adjacent scenes when entered.
- You can automatically load neighboring scenes when player crosses scene borders and unload all others so at any time you would have 3 scenes loaded: current, previous and next.
Another important note is that additive scenes might overlap each other, so you'll need to offset objects on each scene or write a script which places scene gameobjects in required location.
(For example, there is popular trick: move all UI to separate scene in additive mode to keep other scenes as clean as possible; UI must not be destroyed when scene is changed after all)