x


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

Patyrn gravatar image

Patyrn
647 149 105 120

(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

aldenneely15 gravatar image

aldenneely15
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);
             if(useRandomRotation==true){
                 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

save gravatar image

save
9.7k 60 53 96

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

By RSS:

Answers

Answers and Comments

Topics:

x2895
x781

asked: May 25, 2011 at 07:35 PM

Seen: 2571 times

Last Updated: Apr 01 at 03:41 PM