- Home /
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.
Answer by · Sep 06, 2010 at 02:24 PM
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.
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 =
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.
worked perfectly, Here it is implemented.
function NuttCounter() : int { var Nutts : GameObject[] = GameObject.FindGameObjectsWithTag("nutt"); print(Nutts.length); TotalNutts = Nutts.length;
}
then in the update function I have " if (NuttsCollected >= TotalNutts){ YouWin();}
so this will eli$$anonymous$$ate I wold say 40% of the work when I create the levels for this game, allowing me to create more levels without getting bored!
Your answer
Follow this Question
Related Questions
bounds checking a list? 2 Answers
Get size of a vector3 array c# 1 Answer
Generic List.Count always gives 0 2 Answers
A node in a childnode? 1 Answer
Selection list from Array Unity - Random - GameObjects array 1 Answer