- 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");
 
             }
         }
     }
 }
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                