- Home /
Are there better ways to pass variables from one gameobject to another than find, getcomponent?
Seems like using find takes up unnecessary processing during runtime - is there a way to declare the variable directly?
Answer by _Petroz · Dec 15, 2010 at 03:37 AM
Eric is right but I'd just like to add, this the price of doing business with a component based architecture. I think it's a pretty small price to pay to never have to deal with deep inheritence heirachies and the dreaded diamond. As Eric said you only have to search once and cache the result locally.
Another way to avoid it is to use dependency injection with dynamic object creation. In other words use AddComponent to create the script component and then initialize the script immediately after creation so it is ready to go without any lookups.
Enemy enemy = gameObject.AddComponent<Enemy>;
enemy.init(player);
Here I have created the script component 'enemy' at run-time and initialized it with 'player' so the script doesn't not need to have a Find or GetComponent to locate the player.
Answer by Eric5h5 · Dec 15, 2010 at 01:47 AM
GetComponent isn't that big a deal; only worry about it if you're doing it frequently every frame. Find is much worse, but generally you don't need it, depending on what you're doing. Use references with public variables and so on (see Petroz's answer for what I mean by "and so on"). If you use Find, just do it once and cache the result (same for GetComponent if you use it to get the same component frequently).
Your answer

Follow this Question
Related Questions
Best way to handle many versions of same GameObject? 1 Answer
How to save a gameObjects on a prefab and variables with a script? 1 Answer
GameObject references runtime script in scene file. Unsure whats wrong 2 Answers
using WWW to upload prefabs/game objects in webplayer... help 1 Answer
What variables can i declare? 1 Answer