x


Array to create a list of objects in the scene?

Hi Unity Community.

I would like to make a list of objects in a scene. Lets say I design 3 space levels and I have a perfab called "commet". In level 1, I add 10 commets, in lvl two, 3 commets. And in level three, 12 comments.

Now I tell the player to destroy all comments in the scene and I want to display it like "1/10". I know there is a way I can create an Array tell the array to add all commets in the scene to it and and count them. I am just having a hard time finding a code snip of something similar to point me in the right direction. I am using Javascript in unity.

Thank you for your time.

more ▼

asked Sep 06 '10 at 02:09 PM

Anxowtf gravatar image

Anxowtf
1.6k 22 27 37

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

1 answer: sort voted first

You could just have a static variable that increments/decrements every time you destroy a comet. It seems as though you know how many comets there are in total at any given time. When you spawn more, you'd just add that same number to the current total.

static var cometsDestroyed : int = 0;
static var cometsTotal : int = 0;

When you spawn comets:

cometsTotal += numberOfCometsYouJustSpawned;

When you destroy a comet:

cometsDestroyed += 1;

Your GUI script could then just display cometsDestroyed/cometsTotal.


However, since you asked for a function that creates an array and counts them, this function will count how many GameObjects with the 'Comet' tag are still existing. The GameObject.Find searches aren't cheap, so you probably wouldn't want to do this every frame.

function CountComets () : int;
{
    var comets : GameObject[] = GameObject.FindGameObjectsWithTag("Comet");
    return comets.Length;
}

Honestly, I would suggest the first approach, unless there's a reason you need the function (that you didn't mention in your question).

Hope this helps.

more ▼

answered Sep 06 '10 at 02:24 PM

Marowi gravatar image

Marowi
4.9k 4 14 53

Ah thats great, thank you for your answer. I am not actually working with comets and such, I was just using it as an example so that I can ask my question without confusion.

I can just call that CountComet function from inside the Awake function so it wont do it every frame. I am looking to create around 50 levels or more in which you have to collect a particular item that i will place all over, but not all levels will have the same amount of items, and I have on master game controller code that controlls all the levels the same way. so I did not want to create a . " if application.loaded =

Sep 06 '10 at 04:03 PM Anxowtf

to level 1 then item count = 10 and so on. I wanted a code that is relative to the level designed.

Again, Thank you for your answer, not tested yet but it looks like that will get me on the right track.

Sep 06 '10 at 04:05 PM Anxowtf

worked perfectly, Here it is implemented.

function NuttCounter() : int { var Nutts : GameObject[] = GameObject.FindGameObjectsWithTag("nutt"); print(Nutts.length); TotalNutts = Nutts.length;

}

Sep 06 '10 at 04:32 PM Anxowtf

then in the update function I have " if (NuttsCollected >= TotalNutts){ YouWin();}

so this will eliminate I wold say 40% of the work when I create the levels for this game, allowing me to create more levels without getting bored!

Sep 06 '10 at 04:34 PM Anxowtf
(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:

x1363
x356
x78

asked: Sep 06 '10 at 02:09 PM

Seen: 3133 times

Last Updated: Sep 06 '10 at 02:09 PM