- Home /
Question by
banshock · Jul 04, 2015 at 07:09 PM ·
resourcesscene-switchingsingletonscene-change
resources loaded in one scene not transfered to other
I created a main menu scene in which a script was attached as follows: using UnityEngine; using System.Collections; using System.Collections.Generic;
public class GameVariables : MonoBehaviour { //a singleton class without lazy instantiation
public static GameVariables variables = new GameVariables ();
public int score { get; set; }
public float StartTime=0.0f;
public float DeltaTime = 0.75f;
public Dictionary<GameObject, List<GameObject> > hazards = new Dictionary<GameObject, List<GameObject>>();
public GameObject[] hazardList = new GameObject[4]; //list of all hazard types.
public int n = 10; //pooled amount of each hazard
public bool canGrow = true; //can the object pool grow?
public float speed = 4;
private GameVariables(){
}
void Start () {
DontDestroyOnLoad(gameObject);
if(variables != null && variables != this){ /*Debug.Log("destroyed"); */Destroy(gameObject); }
variables = this;
Instantiation ();
}
void Awake(){
DontDestroyOnLoad(gameObject);
if(variables != null && variables != this){ /*Debug.Log("destroyed"); */Destroy(gameObject); }
variables = this;
}
public void addHazards(GameObject hazardtype){
/*Debug.Log("add hazards");
if (hazardtype == null)
Debug.Log ("no hazrd type");*/
variables.hazards.Add (hazardtype, new List<GameObject>(variables.n));
}
public void addInstantiations(GameObject hazardtype, int n){
for (int i=0; i<n; i++) {
//Debug.Log("add instantiations");
variables.hazards[hazardtype].Add (Instantiate (hazardtype,
new Vector3 (0.0f, 8.5f, 0.0f),
Quaternion.identity) as GameObject);
variables.hazards[hazardtype][i].SetActive (false);
}
}
public void Instantiation(){
/*for (int i=0; i<4; i++) {
Debug.Log("gamevariables");
Debug.Log (variables.hazardList [i]);
}
*/
for (int i=0; i<4; i++) {
//Debug.Log("started");
variables.addHazards (variables.hazardList [i]);
variables.addInstantiations (variables.hazardList [i], variables.n);
//Debug.Log (variables.hazards.Count);
}
}
}
but when the start button loaded another scene and i tried to access these variables(the variables of the above instance named "variables") i am getting missing reference error:
MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
SpawnWaves.Spawn () (at Assets/Scripts/SpawnWaves.cs:31)
Comment