- Home /
 
Can't pass variables between 2 scripts
hi,
I have 2 scripts, a renderItem script assigned to 10 item gameobjects(locations) out of which only 1 will spawn(render) and a globalVariables script assigned to an empty game object in the scene to select which location will be spawned.
when I run the following scripts, nothing is generated in the scene. I found out that the problem is that renderItem.js for each item cannot see any variables from the globalVariabes script. Any ideas on what I am doing wrong?
I have used the same type of setup for OnMouseDown() functions in the past and it works, why does it not work with Start() or Update()?
Thanks in advance!
renderItem.js:
 var KeyObj:GameObject;// model to be rendered
 
               var keyPosition:int;//manually set when placed in scene(1,2,3...etc)
 
               function Start()
 
               {
 
                var scriptt: globalVariables = GetComponent(globalVariables);
 
                KeyObj.renderer.enabled=false;
 
                if((script.keyPos[keyPosition]))
 
                 KeyObj.renderer.enabled=true;
  
               }  
globalVariables.js
 static var keyPos:boolean[];//key spawn poing
 
                keyPos= new boolean[10];//10 locations to choose from
 
               function Awake(){
 
                //following values will be randomly assigned later on
 
                keyPos[3]=false; 
 
                keyPos[2]=true;//spawn at location 2
 
                keyPos[1]=false;
  
                keyPos[0]=false; } 
You can see a long explanation on http://unitygems.com/. You can find how to access variables from other scripts and an explanation on static variables in the memory management section.
Answer by aldonaletto · Nov 11, 2012 at 12:45 PM
You can access static variables directly using the script name (class name, actually) directly like this:
   ...
   if((globalVariables.keyPos[keyPosition]))
      KeyObj.renderer.enabled=true;
   ...
 
               NOTE: Your original code would work only if globalVariables.js were attached to the same object as renderItems.js.
Thanks for answering! I didn't know that. I tried it but still no luck though. Also, i noticed that I get a log error:"Object reference not set to an instance of an object" for the above if statement, any clues?
Thanks again!
Do you have anything in the $$anonymous$$eyObj slot of the Inspector or does it say None(GameObject)?
You usually get errors when trying to modify prefab properties by script - do it in the instantiated object ins$$anonymous$$d. You could instantiate the $$anonymous$$eyObj first, then modify the clone like this:
 var kObj: GameObject = Instantiate($$anonymous$$eyObj, ...); // get a ref to the clone
 if (globalVariables.keyPos[keyPosition])
   kObj.renderer.enabled=true; // set the clone renderer
 ...
 
                 Your answer