I have a save system for my game state that seems to be working. Just want to know what (if any) are the downsides to this technique. Details below:
To save:
-Serialize my game state to an xml string
-Save xml string to PlayerPrefs.
To load:
-Read xml string from PlayerPrefs
-Deserialize into my GameState object.
Like I said, this is all working great right now. I had been saving to/from a file rather than PlayerPrefs but I switched to PlayerPrefs in anticipation of using something like Prime31’s iCloud plug-in which uses PlayerPrefs.
Here is the code:
public void LoadGameState()
{
if(PlayerPrefs.HasKey("GameState"))
{
//load state
XmlSerializer xmlSerializer = new XmlSerializer(GameState.GetType());
StringReader stringReader = new StringReader(PlayerPrefs.GetString("GameState"));
GameState = (GameState)xmlSerializer.Deserialize(stringReader);
}
else
{
//create new
GameState = GameState.CreateNew();
SaveGameState();
}
CurrentWorld = GameState.Worlds[0];
CurrentLevel = GameState.Worlds[0].Levels[0];
}
public void SaveGameState()
{
XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(GameState.GetType());
StringWriter stringWriter = new StringWriter();
xmlSerializer.Serialize(stringWriter, GameState);
Debug.Log("Save state to player prefs");
PlayerPrefs.SetString("GameState",stringWriter.ToString());
}