Having a bit of a problem with loading a save file.
The problem i'm having is that in my title screen scene i have a script that handles saving and loading. When you click on the CONTINUE button it execute these lines.
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
SaveData data = (SaveData)bf.Deserialize(file);
file.Close();
LoadScene(data.scene);
GameObject.Find("Player").transform.localPosition = new Vector3(data.player_x, data.player_y, 0);
GameObject.Find("char00").GetComponent<Stats>().charName = data.player_name; //Problem here
The problem comes from when it tries to find the char00 Object, because it doesn't exist in the title screen scene.
My question is; Why is it that i it's supposed to change scenes to the one saved in playerdata but it doesn't change, it looks for char00, etc. first and THEN changes scenes. I put the Load scene first, so it should activate first.
Is there a way to force it to load the scene first? Or is there some other way i can fix this?
put the data in a class field and before the LoadScene use:
Scene$$anonymous$$anager.sceneLoaded += OnSceneLoaded;
Also create a method
void OnSceneLoaded()
{
if(null!=data){
GameObject player= GameObject.Find("Player");
if(player){
player.transform.localPosition = new Vector3(data.player_x, data.player_y, 0);
}
GameObject char=GameObject.Find("char00");
if(char){
char.GetComponent().charName = data.player_name;
}else{
Debug.Log("char00 is null");
}
}
}
The problem isn't setting the location of the character or setting the name from settings. If i'm in the right scene it does it properly.
The problem is it doesn't load the scene first and THEN check for the GameObjects. It seems to try to do everything at the same time, which is causing it to fail because it NEEDS to be in the other scene for any of the other lines to make sense.
Also as a side thing, "Scene$$anonymous$$anager.sceneLoaded" doesn't seem to exist. I have no idea what you meant by that.
Scene$$anonymous$$anager.sceneLoaded is in the documentation, maybe your version of unity is older an don't have this.
Your answer
Follow this Question
Related Questions
How to save player score? (C#) 0 Answers
Save and load whole scene 2 Answers
Saving data from multiple game objects 1 Answer
How can I save level progression 1 Answer