- Home /
Question by
Banana13 · Mar 09, 2014 at 10:53 AM ·
gameobjectfunctionloadleveldontdestroyonload
DontDestroyOnLoad does not work after reload the scene?
Hi everyone, I have a object that have a script with a DontDestroyOnLoad function. Now if I go from the scene 1 where the object is to scene 2 it is still there, but if I die in the scene 2 and reload the scene 2 its gone. How can I fix this that the object is still there after reload the scene 2?
Comment
Could you post the code where you: - load the scenes - call dontdestroyonload
In theory it should work fine (I do this all the time in my own code), so there's probably a small issue with your code somewhere that we'll need to see to help.
Answer by Banana13 · Mar 09, 2014 at 01:19 PM
Here is the code at the object that should not be destroyed:
function Update () {
DontDestroyOnLoad (gameObject);
}
And this is my script where I reload the scene:
using UnityEngine;
using System.Collections;
public class GameManager : MonoBehaviour {
// The score that the player currently has
[HideInInspector]
public int curScore;
// The highest score the player has reached (saved)
private int highscore;
// Reference to our custom gui skin
public GUISkin skin;
// Values defining the width and height of our game over screen
public Vector2 losePromptWH;
// Boolean to check if we need to end the game or not
[HideInInspector]
public bool showGameOver;
void Start () {
// Grab the last saved highscore from the player prefs file
highscore = PlayerPrefs.GetInt("Highscore");
}
void Update () {
// If the bird died and our current score is greater than our saved highscore
if (showGameOver && curScore > highscore)
{
// Set the highscore to our current score
highscore = curScore;
// Now save the score as our new highscore
PlayerPrefs.SetInt("Highscore", highscore);
}
}
void OnGUI()
{
// Set the GUI's skin to our custom skin
GUI.skin = skin;
// Show our current score value at the top center of the screen
// (note: it uses the custom Score style in our skin)
GUI.Label (new Rect(Screen.width/2 - 100,100f,200,200), curScore.ToString(), skin.GetStyle("Score"));
// If the bird died, show the game over screen
if (showGameOver)
{
// Define the screen space for the game over window
Rect currentGameOver = new Rect(Screen.width/2 - (losePromptWH.x/2), Screen.height/2 - (losePromptWH.y/2), losePromptWH.x, losePromptWH.y);
// Generate a box based on the game over window rectangle
GUI.Box (currentGameOver, "Game Over", skin.GetStyle("Game Over"));
// Draw our current score within the game over window
GUI.Label(new Rect(currentGameOver.x + 15f, currentGameOver.y + 250f, currentGameOver.width * .5f, currentGameOver.height * .25f), "Score: " + curScore.ToString());
// Draw our highscore within the game over window (if the highscore was beaten, it will show your current score)
GUI.Label(new Rect(currentGameOver.x + 150f, currentGameOver.y + 350f, currentGameOver.width * .5f, currentGameOver.height * .25f), "High score: " + highscore.ToString());
// Draw a replay button on screen and check to see if it was clicked
if (GUI.Button (new Rect(currentGameOver.x + (currentGameOver.width - 110), currentGameOver.y + (currentGameOver.height + 250), 330, 160), "", skin.GetStyle("Play")))
{
// If it is clicked, reload the level
Application.LoadLevel("5 Level");
// Load the highscore from our save file
highscore = PlayerPrefs.GetInt("Highscore");
}
if (GUI.Button (new Rect(currentGameOver.x + (currentGameOver.width - 520), currentGameOver.y + (currentGameOver.height + 250), 330, 160), "", skin.GetStyle("back")))
{
// If it is clicked, reload the level
Application.LoadLevel("1 menu");
}
}
}
}