- Home /
How do I save the game state as a new scene while playing?
I have created a level editor where I can create a level while playing and would like to be able to save the level as a new scene that can be loaded by the unity editor.
Similar questions have pointed to the "Unity Serializer", but the link to it is now dead and it doesn't seem to be supported for Unity 5. I also don't want to user PlayerPrefs because I want to be able to load and edit the scene in Unity, not just while playing.
How can I save objects in a scene to a new scene while playing?
Answer by phil_me_up · Mar 11, 2016 at 12:41 AM
EDIT: XML is now valid!
I don't think you'll be able to create a "scene" file. Even if you could I don't think that would be the best approach for such a system as it would be quite inefficient. By writing your own schema, through proper use of prefabs and a good code base you could describe the scene setup and adjust your key variables in a more efficient way whilst also retaining all control.
If I were doing this then I'd write a system which was able to gather and then serialise key variables your interested in for all objects within the scene to an XML file or similar. I'd then just have on "mainScene" scene which would probably contain only elements I know to be common across all possible levels (managers, maybe UI) and have that populated at run time.
For example, if you had a prefab "barrel", all you need to know about it is the position within the scene and maybe something like "healthRemaining". By creating an XML file that contains something like
<prefab name="barrel" position="10,10,10" health="30" />
you will be able to recreate the scene both at run-time and in the editor.
So, in the play mode all you need to do is load the XML file which contains the setup, parse the information and instantiate / position and setup the relevant objects and your good to go.
You can do exactly the same thing in the Editor. Ideally giving all your key functions the [ExecuteInEditMode] attribute so that there is very little code duplication.
To make this easy on yourself, you could create an interface such as IEditableObject which has prototypes for functions like SerialiseData and DeserialiseData. Back that up with a LevelManager class to control what's loaded and you should be good to go.
Your answer
Follow this Question
Related Questions
How can I save & load gameObjects? 1 Answer
How to Intercept Unity "Save Scene As.." right after saving? 1 Answer
Is there a way to save a scene without opening it ? 1 Answer
Coyote model missing in Locomotion System 2 Answers
Save and load 0 Answers