- Home /
Singleton DontDestroyOnLoad data persistance
Hi Im testing singleton pattern with one instance of GameControl to be persistent thru all scenes, but i ran into problem, code stripped to show only one GameObject connected to GameControl
using UnityEngine;
public class GameCtrl : MonoBehaviour {
public static GameCtrl gameCtrl;
public GameObject someObject;
void Awake(){
if (gameCtrl == null) {
DontDestroyOnLoad (gameObject);
gameCtrl = this;
} else if (gameCtrl != this) {
Destroy(gameObject);
}
}
void OnGUI(){
if (GUI.Button (new Rect (10, 100, 100, 30), "Hide Object"))
someObject.SetActive (false);
if (GUI.Button (new Rect (10, 140, 100, 30), "Restart"))
RestartGame ();
}
public void RestartGame () {
Application.LoadLevel (Application.loadedLevel);
}
}
// and the question: running for first time GameCtrl has reference to someObject, but after restart, when you try to hide object, GameCtrl reference to someObject is missing
"MissingReferenceException: The variable someObject of GameCtrl doesn't exist anymore. You probably need to reassign the someObject variable of the 'GameCtrl' script in the inspector. GameCtrl.OnGUI () (at Assets/GameCtrl.cs:19)"
Ofcourse it is because when reloading Level someObject is destroyed and new one instantiate, and so if GameCtrl is not destroyed it loses reference. Ofcourse when deleting DontDestroyOnLoad() all works fine, but data in GameCtrl is not persistemt and have to serialize data to load it when new GameCtrl awakes
So advice is my approach wrong? or is it ok but have to search for objects onload of Level and make references to them in GameCtrl?
you just need to tell GameCtr to reassign someObject after loading each level, you can try tags, component names, or you could use a prefab(this will be persistent), then instantiate it on run time.
Your answer
Follow this Question
Related Questions
Singleton and DontDestroyOnLoad question 1 Answer
Zelda Room Switching & Preventing Duplicate Player Spawns from dontdestroyonload 2 Answers
Music Manager script. Do I want a singleton? 2 Answers
OnDisable calls singleton instance, creates unwanted object + errors 1 Answer
Preventing my game object from multiplying due to DontDestroyOnLoad() 2 Answers