- Home /
c# Static class dont destroy on load not working
void Start () {
DontDestroyOnLoad (this);
this.hideFlags = HideFlags.DontSave;
// IMPORT SAVES
if(parser.DoesExist(IniFiles.CONTROLS)){ LoadControls(); } else { CreateControlFile(); }
if(parser.DoesExist(IniFiles.GRAPHICS)){ LoadGraphics(); } else { CreateGraphicsFile(); }
//
openHB();
}
// Load game
public static void LoadGame()
{
/* skipping */
Debug.Log("starting");
Timer.Instance.StartCoroutine(LoadGame(int.Parse(parser.Get("level")), pos, rot));
}
private static void OnLevelWasLoaded(int iLevel)
{
levelLoaded = true;
}
private static IEnumerator LoadGame(int level, Vector3 pos, Quaternion rot)
{
Debug.Log("Loading Level");
Application.LoadLevel(level);
while (!levelLoaded)
yield return 1;
levelLoaded = false;
Debug.Log("level was Loaded");
GameObject p = GameObject.FindGameObjectWithTag("Player");
p.transform.position = pos;
p.transform.rotation = rot;
}
I have a global game manager script, In the snippet above I have don't destroy on load and the hideflag method but neither seem to work when I go to load the level in the bottom half.
Answer by Baste · Feb 02, 2015 at 10:17 PM
When you do:
DontDestroyOnLoad(this);
You're setting the script instance component to not destroy on load. The GameObject it's attached to will still be destroyed, though, and as components can't live without the GameObject, it will be destroyed.
What you want instead is:
DontDestroyOnLoad(gameObject);
In addition, the HideFlags.DontSave doesn't do what you think it does - it's only used in editor time, and makes an object not be saved when you save the scene. Just ditch it here, unless you for some reason are instantiating new instances of this script in editor time.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Where is the Mistake in my Coin System? 1 Answer
Unity C# Singleton? 6 Answers
an object reference is required for the non static field error 1 Answer