instantiating into array
Hello,
Straight to the topic:
Is there any way to instantiate objects straight into the array of game objects ?
using UnityEngine;
using System.Collections;
public class Background : MonoBehaviour {
public GameObject [][] background;
public GameObject cube;
private float transform_x ;
private float transform_z ;
// Use this for initialization
void Start ()
{
transform_x = -6f;
transform_z = -11f;
for( int x = 0; x < 7; x ++)
{
for(int y = 0; y < 12; y ++)
{
Instantiate(cube, new Vector3 ( transform_x, 0, transform_z), Quaternion.Euler(90,0,90));
transform_z =transform_z + 2;
if(transform_z == 13)
{
transform_z = -11;
}
}
transform_x = transform_x + 2;
}
}
}
I've got this so far but i don't really know how to throw this instantiated game object into the array.
any hints? :F
Answer by Statement · Oct 22, 2015 at 02:32 PM
First you need to create the array (unless it has been created elsewhere).
Then you can set values to it like so array[x][y] = value;
What you have is called a jagged array. They are usually used when each row have different lengths. In your case you could use a two-dimensional array.
// Jagged array
public class Background : MonoBehaviour
{
public int backgroundWidth = 7;
public int backgroundHeight = 12;
public GameObject[][] background;
public GameObject cube;
private float transform_x;
private float transform_z;
void Start()
{
transform_x = -6f;
transform_z = -11f;
background = new GameObject[backgroundWidth][];
for (int x = 0; x < backgroundWidth; x++)
{
background[x] = new GameObject[backgroundHeight];
for (int y = 0; y < backgroundHeight; y++)
{
Vector3 position = new Vector3(transform_x, 0, transform_z);
Quaternion rotation = Quaternion.Euler(90, 0, 90);
background[x][y] = (GameObject)Instantiate(cube, position, rotation);
transform_z = transform_z + 2;
if (transform_z == 13)
{
transform_z = -11;
}
}
transform_x = transform_x + 2;
}
}
}
And an example with a 2d array.
// Two-dimensional array
public class Background : MonoBehaviour
{
public int backgroundWidth = 7;
public int backgroundHeight = 12;
public GameObject[,] background;
public GameObject cube;
private float transform_x;
private float transform_z;
void Start()
{
transform_x = -6f;
transform_z = -11f;
background = new GameObject[backgroundWidth, backgroundHeight];
for (int x = 0; x < backgroundWidth; x++)
{
for (int y = 0; y < backgroundHeight; y++)
{
Vector3 position = new Vector3(transform_x, 0, transform_z);
Quaternion rotation = Quaternion.Euler(90, 0, 90);
background[x, y] = (GameObject)Instantiate(cube, position, rotation);
transform_z = transform_z + 2;
if (transform_z == 13)
{
transform_z = -11;
}
}
transform_x = transform_x + 2;
}
}
}
Also, Instantiate(Object, Vector3, Quaternion) return an Object type and there is no template overload, so you have to cast the result to GameObject. See the example above.
Answer by exltus · Oct 22, 2015 at 02:02 PM
If I understand your question right, that this might help.
background[x][y] = Instantiate(cube, new Vector3 ( transform_x, 0, transform_z), Quaternion.Euler(90,0,90)) as GameObject;