- Home /
Random Spawning
Hi,
can someone, please, tell me how to have two objects can't occupy the same position? or in other words, only one object per spawn. thank's a lot for your help
var timer : float = 0.0; var spawning : boolean = false; var prefab : Rigidbody; var spawn1 : Transform; var spawn2 : Transform; var spawn3 : Transform;
function Update () { //check if spawning at the moment, if not add to timer if(!spawning){ timer += Time.deltaTime; } //when timer reaches 2 seconds, call Spawn function if(timer >= 2){ Spawn(); } }
function Spawn(){ //set spawning to true, to stop timer counting in the Update function spawning = true; //reset the timer to 0 so process can start over timer = 0;
//select a random number, inside a maths function absolute command to ensure it is a whole number var randomPick : int = Mathf.Abs(Random.Range(1,4));
//create a location 'Transform' type variable to store one of 3 possible locations declared at top of script var location : Transform;
//check what randomPick is, and select one of the 3 locations, based on that number if(randomPick == 1){ location = spawn1; Debug.Log("Chose pos 1"); } else if(randomPick == 2){ location = spawn2; Debug.Log("Chose pos 2"); } else if(randomPick == 3){ location = spawn3; Debug.Log("Chose pos 3"); }
//create the object at point of the location variable var thingToMake : Rigidbody = Instantiate(prefab, location.position, location.rotation); thingToMake.AddForce(Vector3(0,0,100));
//halt script for 1 second before returning to the start of the process yield WaitForSeconds(1); //set spawning back to false so timer may start again spawning = false; }
Answer by tool55 · Mar 20, 2011 at 06:09 AM
For starters, you can save yourself some code by using an array for your spawn points:
var spawn : Transform[];
function Spawn() {
spawning = true; timer = 0;
var randomPick : int = Mathf.Abs(Random.Range(0,3));
var thingToMake : Rigidbody = Instantiate(prefab, spawn[randomPick].position, spawn [randomPick].rotation); thingToMake.AddForce(Vector3(0,0,100));
yield WaitForSeconds(1); spawning = false; }
As for your question, not quite clear what you're trying to achieve. Do you mean you only want a spawn point to be used once? In other words, are you asking how to make it so that, for example, spawn point 2 isn't used twice in a row?
Thank you very much for your reply. I am sorry indeed not to be very clear, but I'm not English. Absolutely, I would like each spawn is used only once.
I see that you got your answer on the forum. That seems like a nice solution.