The approach is ok, however there is one fundamental core logic is missing on your save system afais.
You need to coralate your levels with your save data, meaning you save per map/level not globally per object. This is generally for level actors, cause you want to save a level object to that level.
If not as you said if there is a chair moved in another level, its moved on other levels too as chair just looks for itself but not level.
At the same time some logic on save system is global like you save player health and player health is global you start with same health on all levels ( whatever is saved).
The easiest way is to seperate data types so you don’t have a problem. Like
PlayerSaveData
LevelSaveData
LevelObjectSaveData
PlayerProgressionData
PlayerInventory
PlayerSettings
VideoSettings
etc.
and easiest solution to your problem is to make save slot names atleast coralated with level as slot.
Level001_PlayerSaveData_Date_Time
etc having these kind of logic gates do solve a lot of problems.
- The problem you having as you can have many corelations with save data
- When you make a save you don’t have to save all the things. There is an elevator its moved so you just save level object data with elevators state (floor etc)
- It makes your game faster especially is a heavy usage like open world, you will not have to save everything and load everything at once.
I know that it creates a bit more work but its generally for greater good.
There is some plugins do those this way too however I strongly recommend creating your own system so you exactly know what is going on or have a greater idea of the problems if something goes wrong later on. Building the right save system for your game matters a lot, not too much, not too less just enough for your game.
Here is a better logic save game system that puts you in the right direction rather than a vague tutorial video. It doesn’t have to be exactly like this can be even much more better however it is a good starting point for an extendable system.
Let me know if works if you manage to coralate your save data with level (name) so you can have correct logic of saving objects.