This describes a method of persisting data in Unity. For example, saving and loading the current game level.
The first thing that you will need is to create a helper class to read and write the data that you need:
public static void SaveGameState()
{
XmlDocument xml = new XmlDocument();
var el = xml.CreateElement("PlayerStatus");
el.SetAttribute("CurrentLevel", Application.loadedLevel.ToString());
xml.AppendChild(el);
xml.Save("data.xml");
}
public static void LoadGameState()
{
XmlDocument xml = new XmlDocument();
xml.Load("data.xml");
var el = xml.GetElementsByTagName("PlayerStatus")[0];
string currentLevel = el.Attributes["CurrentLevel"].Value;
int loadLevel = 0;
if (!string.IsNullOrEmpty(currentLevel))
{
loadLevel = int.Parse(currentLevel);
if (Application.loadedLevel != loadLevel)
Application.LoadLevel(loadLevel);
}
}
The next stage is to plug this into Unity. I put the following in a Master Script (which is essentially just a script associated with an empty game object).
void OnApplicationQuit()
{
GameState.SaveGameState();
}
void Start()
{
GameState.LoadGameState();
}
I’ve seen plenty of articles on using serialisation for this, and that would obviously have the same effect, but this is another option.