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.

Aquí tienes la lista de reproducción sobre encontrar las referencias en Unity, en esa lista se irán añadiendo vídeos con técnicas cada vez más específicas. El siguiente vídeo habla sobre la técnica que se muestra en este artículo:

Tengo un par de vídeos en los que justamente explico cómo acceder a los childs

En este primer vídeo vemos cómo encontrar el primer CHILD de un GameObject a través de código en Unity


En este otro vídeo vemos cómo encontrar TODOS LOS CHILDS de un GameObject a través de código 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.

script para mostrar formas de encontrar las referencias de gameobjects en la escena de unity
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 al HIJO de un GameObject desde un Script en Unity

Tal vez nos interesa obtener la referencia de un GameObject que sabemos que está como hijo de otro GameObject del que si tenemos la referencia, por ejemplo, en la figura 4 vemos que el objeto que queremos encontrar está como hijo del GameObject que tiene asignado el script. En el artículo sobre “gameObject” y “transform” vimos cómo acceder al objeto que tiene el Script asignado, por lo tanto contamos con la referencia del padre del objeto que queremos encontrar y podemos aplicarle distintas acciones, entre ellas obtener sus hijos.

Fig. 4: El objeto que queremos encontrar está como hijo del objeto que tiene asignado el Script.

Para encontrar el hijo de un GameObject en Unity vamos a usar la componente Transform del GameObject padre, la cual podemos acceder directamente a través de la variable “transform”.

Sobre la referencia de la componente Transform del padre ejecutamos el método GetChild(int index) que permite obtener la componente transform del objeto hijo que esté en la posición indicada entre paréntesis. Los hijos comienzan a contarse desde la posición 0 y como el GameObject solo tiene un hijo (como se observa en la figura 4), a la función GetChild le pasamos como parámetro el valor 0.

Esto dá como resultado la transformación del hijo, pero como nos interesa obtener la referencia del GameObject no de su Transformación, utilizamos el operador punto y accedemos el campo “gameObject”.

La instrucción queda como se observa en la línea 18 de la figura 5.

Instrucción para encontrar la referencia de un GameObject que se encuentra como hijo de otro GameObject en Unity
Fig. 5: Instrucción para encontrar la referencia de un GameObject que se encuentra como hijo de otro GameObject.

De esta forma, en la variable “objectToFind” tendremos asignada la referencia del objeto que estamos buscando.



Scroll al inicio
Secured By miniOrange