Cómo asignar un GameObject o Componente en el INSPECTOR en Unity

Introducción

Este artículo pertenece a la serie sobre encontrar las referencias de GameObjects y Componentes en Unity, en esta serie se verán distintas técnicas para encontrar desde un Script cualquier objeto que esté en la jerarquía en una determinada escena en Unity, esto es algo muy importante que hay que entender y saber cómo hacerlo ya que si contamos con la referencia de un objeto o componente, podremos accederlo y leer cualquier dato público o ejecutar cualquier función pública que necesitemos.

En el siguiente vídeo muestro cómo definir una variable en Unity para que aparezca en el inspector y así poder asignar un GameObject de la escena en ella.


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.

Declaración del campo con visibilidad pública

Los campos y variables que se declaran dentro de un Script pueden tener tres tipos de visibilidad: «pública», «privada» y «protegida». Consideremos solo los dos primeros casos, visibilidad privada y pública, en el primer caso el campo declarado como privado no será accesible desde contextos externos al propio Script en el que está definido, mientras que si es declarado con visibilidad pública se puede acceder directamente a ese dato desde otros Scripts. En Unity además se pueden ver los campos públicos en el inspector.

En la figura 4, línea 8 declaramos un campo de tipo GameObject llamado «objectToFind» indicándole la visibilidad pública colocando la palabra «public» por delante.

Fig. 4: Declaración del campo con visibilidad pública.

La figura 5 es una captura de la ventana Inspector del GameObject que tiene asignado el Script que estamos editando, como se observa, el campo «objectToFind» aparece en el inspector (algo que no se veía en la figura 3 con el Script de la figura 1), lo que significa que ahora podemos asignar manualmente el GameObject que queramos almacenar en la variable «objectToFind», es decir podemos asignar manualmente la referencia del objeto.

Esto puede hacerse de dos formas, una es tomando el GameObject de la jerarquía y arrastrándolo al campo, mientras que la otra forma es utilizando el ícono del círculo con el punto que se observa a la derecha del campo (en las figura 5 o 6), esto desplegará una ventana en la que podemos elegir el objeto que queremos asignar.

Fig. 5: En el inspector vemos que aparece el campo declarado como público.
Fig. 6: Se ha asignado manualmente el objeto que se quería encontrar.

Al entrar en el modo juego vemos el mensaje en consola que muestra el nombre del objeto que fue asignado en el campo, esto se produce debido a la ejecución de la instrucción que se observa en la figura 4 (línea 13) y nos confirma que tenemos la referencia del GameObject, ya que pudimos usarla para leer su nombre.

Fig. 7: Al entrar en el modo juego vemos el mensaje en consola con el nombre del objeto.

Alternativa: Declarar el campo como privado incluyendo [SerializeField]

Si se desea mantener la variable con visibilidad privada para que otros Scripts no puedan acceder directamente a ese campo, hay una alternativa para que el campo aparezca en el inspector, consiste en añadir «[SerializeField]» antes de la declaración, como se observa en la figura 8.

Fig. 8: Alternativa a definir el campo con visibilidad pública.

Con esto la variable «objectToFind» será visible desde el inspector y se puede asignar el objeto manualmente en el inspector.

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