- Home /
Help with Load function on Button press
Hello everybody, i've got a little problem with my save and load function for my 2D android game.
So in my game when the player hits a checkpoint the scene and the position of my player should be saved.
Now i want a "Continue"-Button in the main menu so when you press it the scene and position of my player get loaded.
The problem is i've tried a few things but the position of my player won't get loaded the scene works with no problem.
So here is my PlayerController Script snippet :
// Check if the Player enters a Checkpoint & Save position and Scene
void OnTriggerEnter2D(Collider2D other) {
if (other.tag == "Checkpoint") {
theLevelManager.SaveGame ();
respawnPoint = other.transform.position;
}
And here is my LevelManager Script snippet :
public void SaveGame () {
PlayerPrefs.SetInt ("Level", SceneManager.GetActiveScene ().buildIndex);
PlayerPrefs.SetFloat ("PlayerX", thePlayer.transform.position.x);
PlayerPrefs.SetFloat ("PlayerY", thePlayer.transform.position.y);
PlayerPrefs.SetFloat ("PlayerZ", thePlayer.transform.position.z);
PlayerPrefs.Save ();
print ("Game Saved");
}
public void LoadGame () {
SceneManager.LoadScene (PlayerPrefs.GetInt ("Level"));
transform.position = new Vector3 (PlayerPrefs.GetFloat("PlayerX"), PlayerPrefs.GetFloat("PlayerY"), PlayerPrefs.GetFloat("PlayerZ"));
print ("Game Loaded");
}
The PlayerController Script is attached to the player and the LevelManager Script is attached to an Empty GameObject called LevelManager.
I hope you could point me my mistake out or could explain to me where the problem is 'cause i think i'm overthinking everything a little bit at the moment.
Thank you in advance and for helping me.
Answer by yummy81 · Feb 11, 2018 at 07:18 PM
Look at LoadGame method in LevelManager script. Delete this line of code:
transform.position = new Vector3 (PlayerPrefs.GetFloat("PlayerX"), PlayerPrefs.GetFloat("PlayerY"), PlayerPrefs.GetFloat("PlayerZ"));
and paste it into Awake or Start method in PlayerController script, something along the lines:
private void Awake()
{
transform.position = new Vector3 (PlayerPrefs.GetFloat("PlayerX"), PlayerPrefs.GetFloat("PlayerY"), PlayerPrefs.GetFloat("PlayerZ"));
}
Thank you for pointing me out that mistake.
But now when i want to start a new game the player will port to the saved position so how do i make it when the user starts a new game the position is his start position but the saved position is only used when he wants to continue his game.
I assume that you have two buttons: "New Game" and "Continue". Let's create an int variable with PlayerPrefs named "Continue". Put this code somewhere inside the method which is called when you press "New Game" button:
PlayerPrefs.SetInt("Continue", 0);
And this code somewhere inside the method which is called when you press "Continue" button:
PlayerPrefs.SetInt("Continue", 1);
Then, in PlayerController script change Awake method to something along the lines:
private void Awake()
{
if (PlayerPrefs.GetInt("Continue")==1)
{
transform.position = new Vector3 ((float)PlayerPrefs.GetFloat("PlayerX"), (float)PlayerPrefs.GetFloat("PlayerY"), (float)PlayerPrefs.GetFloat("PlayerZ"));
}
}
Thank you so so much for your help and your fast reply.