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?
↧