ok, I have six variables that are game objects, spawn1, spawn2 ect. In the script I want to be able to get the variable by name using a random number. So like
:
spawn_+random_number2
Please help, here is my script:
var coin_prefab:GameObject;
var spawn_1:GameObject;
var spawn_2:GameObject;
var spawn_3:GameObject;
var spawn_4:GameObject;
var spawn_5:GameObject;
var spawn_6:GameObject;
private var random_number:int;
private var random_number2:int;
function Awake()
{
InvokeRepeating("spawn", Random.Range(5,15), Random.Range(5,15));
}
function spawn()
{
random_number = Random.Range(1, 2);
if (random_number == 1) //coin
{
random_number2 = Random.Range(1,6);
pos = "spawn_"+random_number2.ToString().transform.position;
rot = "spawn_"+random_number2.ToString().transform.rotation;
Instantiate(coin_prefab, pos, rot);
}
}
I would suggest creating an array to hold your GameObjects. That way you can just pass in random_number2 as the index.
var coin_prefab:GameObject;
var spawns : GameObject[];
private var random_number:int;
private var random_number2:int;
function Awake()
{
InvokeRepeating("spawn", Random.Range(5,15), Random.Range(5,15));
}
function spawn()
{
random_number = Random.Range(1, 2);
if (random_number == 1) //coin
{
random_number2 = Random.Range(1,6);
pos = spawns[random_number2].transform.position;
rot = spawns[random_number2].transform.rotation;
Instantiate(coin_prefab, pos, rot);
}
}
Well, you can’t treat variable names like strings. I think you want to try this:
var coin_prefab:GameObject;
var spawns : GameObject[];
private var random_number:int;
private var random_number2:int;
function Awake()
{
InvokeRepeating("spawn", Random.Range(5,15), Random.Range(5,15));
}
function spawn()
{
random_number = Random.Range(1, 2);
if (random_number == 1) //coin
{
random_number2 = Random.Range(1,6);
pos = spawns[random_number2].transform.position;
rot = spawns[random_number2].transform.rotation;
Instantiate(coin_prefab, pos, rot);
}
}
Then just assign each GameObject to a position in the array (if not in the inspector) like so (replacing all caps stuff w/your actual values):
spawns[SOME VALUE BETWEEN 0 and 5] = SOMEGAMEOBJECT;
I am not sure if this will work in UnityScript, but this does work in JavaScript:
random_number = Random.Range(1, 2);
if (random_number == 1) //coin
{
random_number2 = Random.Range(1,6);
var randomSpawner : GameObject;
randomSpawner = this['spawn_' + random_number2.ToString()];
// Avoid looking up the same transform component multiple times
var spawnerTransform = randomSpawner.transform;
pos = spawnerTransform.position;
rot = spawnerTransform.rotation;
Instantiate(coin_prefab, pos, rot);
}
I would be inclined to reference your spawners using Transform
instead of GameObject
to avoid the need to lookup the transform components each time.
Though I would use the approach suggested by @iwaldrop (but with Transform[]
instead of GameObject[]
):
var coin_prefab:GameObject;
var spawns : Transform[];
private var random_number:int;
private var random_number2:int;
function Awake()
{
InvokeRepeating("spawn", Random.Range(5,15), Random.Range(5,15));
}
function spawn()
{
random_number = Random.Range(1, 2);
if (random_number == 1) //coin
{
random_number2 = Random.Range(1,6);
pos = spawns[random_number2].position;
rot = spawns[random_number2].rotation;
Instantiate(coin_prefab, pos, rot);
}
}