- Home /
Spawn gameObjects at random locations in limited area
What I want to do is spawn gameObjects(well technically sprites but it should work the same) inside of a limited area, so say within the area of a box with a size of say 10x10, but at random locations inside that area? Any ideas on how this would be done, preferably in javascript if possible. Thanks
Here's the code I'm currently using that I got with the help of a good friend:
private var birdClone : Rigidbody2D;
var bird : Rigidbody2D;
var birdX;
var birdY;
private var birdPosition;
Invoke("SpawnBird", 1);
function Update () {
birdX = Random % 5;
birdY = Random % 5;
birdPosition = Vector3(birdX, birdY, transform.position.z);
}
function SpawnBird () {
birdClone = Instantiate(bird, birdPosition, transform.rotation);
}
But it gives me the following errors:
Assets/RandomSpawner.js(12,24): BCE0051: Operator '%' cannot be used with a left hand side of type 'System.Type' and a right hand side of type 'int'.
Assets/RandomSpawner.js(12,24): BCE0051: Operator '%' cannot be used with a left hand side of type 'System.Type' and a right hand side of type 'int'.
Answer by Talidos · Mar 09, 2014 at 02:36 AM
'Random' by itself doesn't give a value you can use.
Try this:
var birdX = Random.Range(0.0, 5.0);
var birdY = Random.Range(0.0, 5.0);
That will set birdX and birdY to random float values between, and including, 0 and 5.
Reference Here: Random.Range Script Reference.
That works exactly how I want but How would I do that so it spawns no more than ten and then waits about 3 seconds then spawns another random amount between 1 and ten?
You'd have to tack how much time has passed since the last spawn, and call your SpawnBird function when that time is up.
var lastSpawnTime;
function Start() {
lastSpawnTime = Time.time;
}
function Update() {
if (Time.time - lastSpawnTime > 3) {
SpawnBird();
lastSpawnTime = Time.time;
}
}
funtion SpawnBird() {
Debug.Log("Spawning!");
// Note: You should put your position
// code here rather than in Update().
}
Answer by MakeCodeNow · Mar 09, 2014 at 01:16 AM
For a box, use Random.Range() for each axis. For a sphere, use Random.UnitSphere() and then scale the result by the radius of your sphere. Easy!
Answer by thornekey · Mar 09, 2014 at 01:30 AM
void Spawn()
{
float spot= ; //actual location to spawn
float randomY = Random.Range(LOC1f, LOC2f);
Instantiate(urObject, new Vector3(spot, randomY, 0), Quaternion.identity);
}
as u can see, LOC1 and LOC2 are the location in which an object can spawn between. this is how you do it
Answer by getyour411 · Mar 09, 2014 at 02:42 AM
I'll add one since all the other examples use Random.Range (x,y). To get a number between 0.0 and 1.0 (inclusive), you can use Random.Value (no parameters). To get a float between 0 and 10 you can do Random.Value * 10