Before updating to Windows 10 you may need to return your Pro license. More information here

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, 2011 at 07:35 PM

avatar image

682 149 106 122

(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, 2011 at 07:40 PM

avatar image

1 6 4 4

(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, 2011 at 07:43 PM

avatar image

10.1k 61 75 104

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, 2011 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, 2011 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, 2011 at 08:12 PM save

I was afraid that would be the only answer.

May 25, 2011 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, 2011 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, 2011 at 07:35 PM

Seen: 2808 times

Last Updated: Apr 01, 2014 at 03:41 PM