Create a random group of asteroids.

What would be a good way to create a random assortment of asteroids in a given bounding area, with no overlaps being allowed? I can't think of any way besides brute force while loops.

more ▼

asked May 25 '11 at 07:35 PM

Patyrn gravatar image

602 52 55 65

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

You can use a for loop and the Instantaniate command to create an asteroid field. ive thought of this idea too XD

more ▼

answered May 25 '11 at 07:40 PM

aldenneely15 gravatar image

1 2 2 2

(comments are locked)
10|3000 characters needed characters left

In our game I recently did this to spawn debris. It shows the bounding box in the editor and is ready to take different types of meshes with a random rotation. Adding different sizes would just be another variable to throw in if you want that.

var junkObjects : GameObject[];  //The different types of objects to spawn
var totalObjects : int = 100;    //The amount of objects to spawn
var size = Vector3(10,10,10);    //The initial size of the spawn area
var useRandomRotation : boolean = true; //Random rotation at spawn

private var pos;

function Start () {

       for(i=0; i<totalObjects; i++) {

         var randomX : int = Random.Range(-size.x/2, size.x/2);
         var randomY : int = Random.Range(-size.y/2, size.y/2);
         var randomZ : int = Random.Range(-size.z/2, size.z/2);

         pos = transform.position+Vector3(randomX, randomY, randomZ);
         var junkObject = Random.Range(0,junkObjects.length);
          Instantiate(junkObjects[junkObject], pos, Random.rotation);  
         } else {
          Instantiate(junkObjects[junkObject], pos, Quaternion.identity); 


function OnDrawGizmosSelected () {
    Gizmos.color = Color (1,0,0,.5);
    Gizmos.DrawCube (transform.position, Vector3 (size.x,size.y,size.z));
more ▼

answered May 25 '11 at 07:43 PM

save gravatar image

9.5k 22 33 71

http://unity3d.com/support/documentation/ScriptReference/Transform-localScale.html to manipulate the scale of the instantiated gameobject (which needs to be var:ed and referenced to after instantiation) if you want the scaling. Remember that large quantities hogs loadingtimes quite good.

May 25 '11 at 07:57 PM save

But how would you prevent overlaps? For random junk overlaps probably do not matter, but if you're dispersing a smaller number of larger objects, overlaps are a bit of an eye-sore.

May 25 '11 at 08:06 PM Patyrn

I would keep a list of where every object had spawned and have a bounding sphere to that position, if the random range goes inside the limited area then randomize new numbers / push a random vector direction until free space is found.

May 25 '11 at 08:12 PM save

I was afraid that would be the only answer.

May 25 '11 at 08:33 PM Patyrn

I can't think of any other way that is quick enough, I probably would have randomized the positions first tho into an array (with the range solution) and then instantiate towards that whole array. Still this script gets you going pretty good in the right direction hopefully.

May 25 '11 at 08:37 PM save
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments



asked: May 25 '11 at 07:35 PM

Seen: 2102 times

Last Updated: Apr 01 at 03:41 PM