Introducción

En este artículo vemos cómo encontrar un GameObject de la escena en Unity a través de su nombre, la idea de este procedimiento es aplicarlo dentro de un script, normalmente en una función de inicialización (como Awake o Start) y nos permite referenciar un GameObject de la escena desde el script y de esa forma aplicarle funciones o leerle variables.

Para encontrar un GameObject por su nombre en Unity se utiliza la siguiente instrucción:

GameObject.Find(“Nombre del GameObject”);

Esta instrucción se puede llamar desde cualquier Script y lo que hace es revisar cada uno de los elementos de la jerarquía hasta dar con aquel que se llama igual que el parámetro ingresado, en este caso “Nombre del GameObject“, este nombre podría ser cualquier nombre

En el siguiente vídeo muestro cómo encontrar objetos de la escena por su nombre en Unity.


Condiciones iniciales

Partimos de un Script llamado “FindReferenceOfAnObject” en el que vamos a encontrar la referencia de un cierto GameObject que está en la escena en Unity, dentro del Script usaremos esa referencia para imprimir su nombre en consola con la instrucción de la línea 13 de la figura 1.

Fig. 1: Script que vamos a utilizar para ver los distintos métodos.

La jerarquía de la escena que vamos a usar está compuesta por los GameObjects que se observan en la figura 2, el objeto “Script-GameObject” es el que tiene asignado el Script de la figura 1 y es el que se encargará de encontrar las referencias, en la figura 3 se ve el inspector de este GameObject, donde está asignado el Script.

El objeto “GDT (Object to Find)” que se ve en la figura 2 es el objeto que tenemos que encontrar, así que si tenemos éxito deberíamos ver ese nombre impreso en consola.

Fig. 2: Jerarquía de la escena que vamos a utilizar para encontrar las referencias.
Fig. 3: Inspector del GameObject que tiene asignado el Script para encontrar referencias.

Cómo encontrar un GameObject de la escena por su NOMBRE en Unity

Si conocemos el nombre del GameObject en la escena que queremos acceder podemos usar esa información para dar con la referencia en nuestro Script. Para eso utilizamos el método “Find” dentro de la clase GameObject y le pasamos como parámetro el nombre del objeto que se quiere encontrar, como se observa en la figura 4.

Fig. 4: Instrucción para encontrar la referencia de un GameObject de la escena por su nombre.

Cuando se ejecute esa instrucción, Unity recorrerá toda la jerarquía en busca de un GameObject con ese nombre, si lo encuentra lo devuelve y la referencia nos queda en la variable “objectToFind”, pero si no lo encuentra esta variable tendrá valor null y nos dará el error de “NullReferenceException” si intentamos accederla.

Para tener en cuenta, si tenemos más de un objeto que tiene exactamente el mismo nombre, Unity nos devolverá el primero de ellos que encuentre en su registro, esto puede dar lugar a ambigüedades, es decir podríamos obtener la referencia de un objeto distinto al que estamos buscando.

Para evitar incrustar datos directamente dentro de las funciones lo que se puede hacer es definir un String con el nombre del objeto que se quiere encontrar y luego ejecutar la función “Find” pasando como parámetro el String, de esa manera evitamos hacer Hard-Coding, como se observa en la figura 5.

Fig. 5: Se declara un string con el nombre del objeto a encontrar y con esto se evita hacer Hard-Coding.

Salir de la versión móvil
Secured By miniOrange