- Home /
How can I pass a type as a parameter?
There's a way to pass a non-specified component as a parameter, like so:
public static void getObjectsInRange(System.Type type) {
type Obj = GameObject.FindObjectOfType(typeof(type)) as type;
// the code body is just for test stuff
}
The function would be called like:
getObjestsInRange(typeof(MyCustomType));
Well, this function is just an example. My objective is to get the objects in a certain distance of an reference Vector3. But that's other stuff. First of all, There's some way to pass a component or type as parameter and use it as I want?
Thanks from now!
Answer by rutter · May 23, 2012 at 12:06 AM
Doesn't look like you need that second typeof
call.
This works for me:
void Start()
{
CountByType(typeof(Collider));
}
void CountByType(System.Type type)
{
var objects = GameObject.FindSceneObjectsOfType(type);
Debug.Log(objects.Length);
}
Is this a function you'll be calling very often? FindSceneObjectsOfType()
is something you should try to use sparingly, although sometimes it is very useful.
I'll use it to draw the enemy's lifebar. I'll get the objects of a type which enemy contains and if it is at a certain distance of the aim position, then I will enable a showLifeBar bool. The function I want to do is just to accelerate this process. There's a less expensive way to do the same thing?
If you're going to be using a reference every frame, it's usually faster to look it up just once, and store the value.
Searching all scene objects can take several milliseconds, which doesn't sound like a lot but can really kill performance if you do it a lot. Usually you can get away with searching just once (on scene start), or having each object add and remove itself to a list during spawn and destroy calls, or a mix of both.
Nice tips! The list idea is going to work better for me, since is a tower defense game and will have a lot of enemy spawn during the game. I'm really looking for some performance tips like this one, specially beucase I'm program$$anonymous$$g a game for mobile which uses Augmented Reality. Thank you!
Your answer

Follow this Question
Related Questions
Return multiple parameter 3 Answers
Lost reference to gameObject when passing it as argument 1 Answer
Passing a Script Name to a Function 2 Answers
Convert String to a type 1 Answer
Mecanim Animation Parameter Types: Boolean vs. Trigger 3 Answers