- Home /
Assign prefab to variable through script
Now I've looked a heck of a lot for an answer to this but have yet to figure it out.
What I am trying to do is change what is assigned to the prefabObject variable depending on what button has been pressed, this is my code which shows my attempt at this. I also have my prefabs named "wall" and "woodenPlank" in a folder called Resources.
var selGridInt : int = 0;
var selStrings : String[] = ["Grid 1", "Grid 2", "Grid 3", "Grid 4"];
var showInventory = false;
var cursorLock = true;
var disableCamera = false;
public var prefabObject : GameObject;
private var offset : Vector3;
private var fwd : Vector3;
private var clone : GameObject;
var unit : float = 3.0f;
var Sound : AudioClip;
function Update () {
fwd = transform.TransformDirection(Vector3.forward) * unit;
offset = transform.position + fwd;
if(Input.GetKeyDown(KeyCode.E)){
audio.PlayOneShot(Sound);
clone = Instantiate(prefabObject, offset, transform.rotation);
}
if(cursorLock == true){
Screen.lockCursor = true;
}
if(cursorLock == false){
Screen.lockCursor = false;
}
if(disableCamera == false){
gameObject.GetComponent(MouseLook).enabled = true;
}
if(disableCamera == true){
gameObject.GetComponent(MouseLook).enabled = false;
}
if(Input.GetKeyDown(KeyCode.I)){
disableCamera = !disableCamera;
cursorLock = !cursorLock;
showInventory = !showInventory;
}
}
var wall : GameObject;
var woodenPlank : GameObject;
function OnGUI () {
if(showInventory == true){
selGridInt = GUI.SelectionGrid (Rect (200, 100, 300, 300), selGridInt, selStrings, 2);
if((selGridInt == 0) && showInventory == true){
wall.SetActive(true);
woodenPlank.SetActive(false);
prefabObject = Instantiate(Resources.Load("wall"));
print("wall selected");
}
if((selGridInt == 1) && showInventory == true){
wall.SetActive(false);
woodenPlank.SetActive(true);
prefabObject = Instantiate(Resources.Load("woodenPlank"));
print("wooden plank selected");
}
}
}
Answer by robertbu · Jul 09, 2014 at 04:02 AM
You need to leave out the 'var' keyword on lines 6 and 14. In addition The code needs to be inside some function. With the 'public' keyword, I assume the code here is not in a function.
Ive added all of my code its in an OnGUI function, I also took out the vars on those lines. I no longer have the error but now if I click one of my buttons the prefab is assign however I get loads of them spawning in one point in my scene. Whats going wrong here?
I fixed it by removing Instantiate, cheers for your help.