- Home /
How to check which script is executing first
Hi, I have 2 Scripts globalproperty.js and display.js. I am accessing the value of variable of globalproperty.js in display.js but its failing, display.js script is executing first. How can i make globalproperty.js script to execute first.
//globalproperty.js//
var number: int;
function Start()
{
number = 4;
}
//display.js//
var global : globalProperty;// instance of globalproperty script
function Start()
{
global = GameObject.Find("Cube").GetComponent(globalproperty);
Debug.Log(global.number);// Here its printing 0 instead of 4. It means this script is executing first
}
I want to execute globalproperty.js first,, what should i do now?
Answer by by0log1c · Dec 23, 2011 at 04:36 PM
You should initialize your content in the Awake() function. That way, once Start() is called, there's no doubt all your scripts are ready to interact with one another. I believe that's the exact purpose of Awake vs Start.
EDIT: Otherwise, you could wait, or use a locking system like BiG propose. Although in the example, if the property isn't ready, it simply skip initialization. You might rather want to wait for it be ready using something like this, in JS:
function Start() { while( !myGameObject.myComponent.ready ) //not ready? then... { yield; // ...wait! }
myProperty = myGameObject.myComponent.myProperty; //go on with initialization
}
This way, it'll will wait until lock is false and will then proceed with initialization.
Agreed.
Use Awake for the stuff you want to happen first.
Use Start for stuff you want to happen afterwards.
http://unity3d.com/support/documentation/$$anonymous$$anual/Execution%20Order.html
$$anonymous$$ore simple and more efficient than the solution of $$anonymous$$e. I hadn't thinked about it.
+1
Answer by BiG · Dec 23, 2011 at 03:39 PM
It's pretty simple: just use a lock:
//globalproperty.js//
var number: int;
var lock=true;
function Start()
{
number = 4;
lock=false;
}
//display.js//
var global : globalProperty;// instance of globalproperty script
function Start()
{
if (GameObject.Find("Cube").GetComponent(globalproperty).lock==false)
global = GameObject.Find("Cube").GetComponent(globalproperty);
}
The logic simply consists in checking for lock value: at globalproperty's execution it turns to TRUE, permitting display's events to occur.
Your answer
