x


World Generation Instantiate Slowly

I have been working on some random world generation using cubes and my code has gotten to a slightly working stage. It generates a minecraftesque looking area but my problem is it instantiates 1 cube at a time through a loop.

As you can probably tell, this would be pretty slow. I was wondering if there would be a faster way to generate all the cubes instead of just instantiating 1 at a time?

I will post my ugly code below so you can get a slight idea of how it works (hopefully)

Sorry I explained this so badly but its kinda hard to explain.

    #pragma strict
var prefab : GameObject;
var dirt : GameObject;
var stone : GameObject;
var dirtstone : int;
var objectPos : Transform;
var chance : int;
static var objectcount : int;
var minObjectHeight : int;
var maxObjectHeight : int;
static var generationtime : int = 500;
var lastHeight : int;

function Start () {
objectPos.position.x = 0;
objectPos.position.y = 3;
objectPos.position.z = 0;
minObjectHeight = 1;


}

function Update () {

for (objectcount = 0; objectcount < 4000; objectcount++)
{
dirtstone = Random.Range (1,3);

if (dirtstone == 1){
prefab = dirt;
}

if (dirtstone == 2){
prefab = stone;
}

if (generationtime >0)
{
maxObjectHeight = Random.Range (100,105);
generationtime -= 1;



chance = Random.Range (1, 3);

if (chance == 2)
    {

        objectcount += 1;
        GameObject.Find("g_Health").guiText.text

= ""+objectcount;

for (objectPos.position.y = 0; objectPos.position.y <

maxObjectHeight; minObjectHeight++) {

objectPos.position.y = minObjectHeight;
prefab = Instantiate(prefab, objectPos.position,

objectPos.rotation); }

if (objectPos.position.y > maxObjectHeight)
{
minObjectHeight = 1;
objectPos.position.y = minObjectHeight;

if (objectPos.position.x >= 16)
{
objectPos.position.z += 1;
objectPos.position.x = 0;
}

else

objectPos.position.x += 1;


}
}
}
}
}
more ▼

asked Feb 05, 2012 at 01:49 AM

djfluffwug gravatar image

djfluffwug
16 20 16 18

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

2 answers: sort voted first

Don't use Update, just use a normal function, and loop through all the objects at once. Although using individual cubes is very slow and inefficient compared to building an optimal mesh.

more ▼

answered Feb 05, 2012 at 02:05 AM

Eric5h5 gravatar image

Eric5h5
109k 55 181 657

Thanks :D

I have now changed from update to a normal function, but I am wondering what you meant by loop through all the objects at once?

Kind Regards, - Djfluffwug

Feb 05, 2012 at 02:42 AM djfluffwug

Loop through them all and don't do any delays, though I can't really tell what your code is doing since the formatting makes it very hard to read. Maybe you're not doing any delays, but in that case I don't know what you mean by not instantiating them one at a time, since that's all computers can do: a sequence of commands one at a time, very quickly.

In any case, as I mentioned, the best way is to build an optimal mesh instead of instantiating cubes.

Feb 05, 2012 at 02:49 AM Eric5h5
(comments are locked)
10|3000 characters needed characters left

I recently had to do something very similar...

What you really need to do is work toward getting your generation functionality into an Editor Script, so you can pick an option off the menu to "Generate Map".

Then, you'll have your scene all ready to go, with all that slow map creation process done pre-runtime.

more ▼

answered Feb 05, 2012 at 03:24 AM

Tasarran gravatar image

Tasarran
1.3k 45 41 51

(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:

x1015
x203
x159
x47

asked: Feb 05, 2012 at 01:49 AM

Seen: 1392 times

Last Updated: Feb 05, 2012 at 03:24 AM