|
I'm a little confused about the order of execution when using "LoadLevel()" with an class using "DontDestroyOnLoad()". I know that Awake() is always before OnEnable() or Start(), but it seems that I have to use "OnEnable()" after a level load to access objects in the scene because it won't find them in Awake(). Again, I only have this problem when using DontDestroyOnLoad(). Any help will be greatly appreciated! Stephane
(comments are locked)
|
|
You probably want to try using start, as OnEnable is called when the object becomes active. Here is the order: Awake is called - this is called as soon as the object is in the scene Start is called - this is called when the object becomes active Update and FixedUpdate are called from then on hope this helps! -Aj Thanks for your help SuperCheese. So if I understand correctly, Awake() is the first function called after using LoadLevel()? Or is Awake() called before LoadLevel()? If Awake() is called before the level loads, then it makes sense that I can't find my objects when looking them up in Awake(), as they don't exist yet.
Apr 11 '11 at 06:56 PM
ronronmx
I'm pretty sure that awake will have been only called in the first scene the object was in. So yes, in this case I reckon that awake would have been called before the LoadLevel(). Here is a couple of examples: You have an object already placed in the scene. When you hit play, awake is called first. Awake is called when the object/script is being loaded. When you load a new scene, it simply doesn't destroy the object. You instantiate an object at runtime. Awake is called when it loads. This is the same as before, but it is completed during the game.
Apr 12 '11 at 12:20 AM
Ariel J
After some research, I've found what you may want to use. Here is a script I made: var found : GameObject; function Start () { //Find the initial object(s) and make sure it doesn't get destroyed found = GameObject.FindWithTag ("GameController"); DontDestroyOnLoad (transform.gameObject); } function OnLevelWasLoaded () { //If a level was loaded, we look for them again! found = GameObject.FindWithTag ("GameController"); } So sorry for the confusion! The above example should fix your problems! -AJ
Apr 12 '11 at 12:41 AM
Ariel J
SuperCheese thanks a lot for your help! You are right about Awake() and Start() not being called again in a class using DontDestroyOnLoad(). Since I was doing all my caching either in Awake() or Start(), it never got ran again after a level load. By adding the same code to OnLevelWasLoaded(), it works like intended. Thanks again!
Apr 13 '11 at 05:33 AM
ronronmx
No probs :D Good luck in Unity!
Apr 13 '11 at 09:23 AM
Ariel J
(comments are locked)
|
