- Home /
Array empties values on RunTime?
I am trying to create an array from my building objects I have created. My script BuildingManager holds an array of my building objects. The array is public and I have dragged the three cubes shown in the picture into my array(Should they be prefabs not in the instance of the game?)
Problem: When I run the game the array gets cleared to be the values I have specified under my BuildManager script. In the start function of my BuildManager it declares the size as five. I want the values to be the one the developer sets in the Unity Inspector!
Note: I realize some of my functions in BuildMenu do nothing currently. I am trying to just figure out why the array is cleared to empty objects before I implement them! Thanks.
Before running the game
After running the game
My scripts are as follows:
Building
using UnityEngine;
using System.Collections;
public class Building : MonoBehaviour {
public int curHealth=100;
public int maxHealth=100;
public int regenRate=2;
public bool isAlive=true;
public void destroy()
{
isAlive=false;
this.destroy();
}
public void create()
{
isAlive=true;
}
public bool getAlive()
{
return isAlive;
}
public void hpUpdate()
{
if (curHealth<=0)
{
isAlive=false;
destroy ();
}
else{
if(curHealth<(maxHealth-regenRate))
{
curHealth+=2;
}
}
}
void FixedUpdate()
{
hpUpdate();
}
}
BuildingManager
using UnityEngine;
using System.Collections;
public class BuildingManager : MonoBehaviour {
public GameObject[] buildings;
void Start(){
buildings=new GameObject[5];
}
}
BuildMenu
using UnityEngine;
using System.Collections;
public class BuildMenu : MonoBehaviour {
public GameObject manager;
BuildingManager buildingmanager;
GameObject[] buildingsArray;
// Use this for initialization
void Start ()
{
//gets the component of the build manager and assigns it to the type BuildManager var
buildingmanager=manager.GetComponent<BuildingManager>();
//set the array of gameobjects to the BuildingManager instance?????
buildingsArray=buildingmanager.buildings;
}
void OnGUI ()
{
//if we get the input draw the window
if(Input.GetButtonDown("Build"))
{
//draw the window
drawMenu();
}
//then de render if f is hit again
}
void drawMenu()
{
GUI.Box(new Rect(30,30,Screen.width/2,Screen.height/2), "Header box");
for (int i=0;i<buildingsArray.Length;i++)
{
Debug.Log(buildingsArray[i]);
}
//if a button is selected we want to start calling the raycast
//and destroy the window
//position from the mouse and rendering
//something to show the position on the users screen
}
}
Answer by jbecana · Mar 16, 2014 at 08:01 AM
When you run Start() your are creating a new array thus removing the content setup through inspector. Remove that line and just use the array.
void Start(){
buildings=new GameObject[5]; // <---- Remove this line
}
Thank you, it works great. Thought I had to initialize the array with a value so that was why I kept the line!