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:
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](https://gamedevtraum.com/wp-content/uploads/2021/01/script-para-encontrar-referencias-de-gameobjects.png)
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.
![](https://gamedevtraum.com/wp-content/uploads/2021/01/encontrar-referencias-jerarquia.png)
![](https://gamedevtraum.com/wp-content/uploads/2021/01/encontrar-referencias-inspector.png)
Las variables “gameObject” y “transform” de MonoBehaviour en Unity
Cualquier Script que creamos que hereda de la clase MonoBehaviour tiene definido en su interior una serie de variables y funciones que ya vienen definidas en MonoBehaviour y en las clases de jerarquía más alta de las que hereda MonoBehaviour. En general cuando creamos un nuevo Script en Unity esta relación de herencia se establece de esa forma, si observan la línea 5 de la figura 1, al final termina con “: MonoBehaviour”, esto le indica a Unity que la clase que se está definiendo extiende su comportamiento de la clase “MonoBehaviour”, para más información sobre el tema dejo este artículo que habla sobre qué es una clase en Programación.
Podemos consultar la documentación de Unity para obtener más información acerca de la clase MonoBehaviour, ahí encontraremos todos los miembros que están definidos en esa clase, es decir las variables y las funciones, y también los miembros heredados de clases superiores, en la figura 4 vemos una captura de las variables heredadas y entre ellas las variables “gameObject” y “transform”.
![](https://gamedevtraum.com/wp-content/uploads/es/desarrollo-de-videojuegos/tutoriales-y-soluciones-para-el-motor-unity/formas-de-encontrar-las-referencias-a-los-gameobjects-en-la-escena-en-unity/que-es-gameobject-y-transform-en-unity-llamar-al-propio-script-que-el-objeto-esta-asignado/que-es-gameobject-y-transform-en-unity.webp)
En las desscripciones nos dice que: la variable “gameObject” apunta al GameObject al cual este componente está asignado y dice que un componente SIEMPRE está asignado a un GameObject. Con “este componente” se refiere al MonoBehaviour sobre el que se esté trabajando, en nuestro caso los Scripts que estamos editando. Y la variable “transform” interpretando la descripción nos dice que apunta a la componente Transform del GameObject al cual este componente está asignado. Un detalle importante es que un GameObject SIEMPRE tiene asignado como mínimo un componente Transform.
Entonces si el GameObject que queremos utilizar dentro de nuestro Script es precisamente el mismo GameObject al cual el Script está asignado, la referencia de este GameObject ya está definida dentro de un campo interno de la clase MonoBehaviour, el campo llamado “gameObject” (primera letra con minúscula), este nombre hace referencia al mismo objeto al cual el Script está asignado.
![](https://gamedevtraum.com/wp-content/uploads/es/desarrollo-de-videojuegos/tutoriales-y-soluciones-para-el-motor-unity/formas-de-encontrar-las-referencias-a-los-gameobjects-en-la-escena-en-unity/referencias-gameobject-propio.webp)
En este caso no sería necesario definir el campo “objectToFind”, sin embargo vamos a inicializarlo como venimos haciendo hasta ahora. En la línea 17 de la figura 5 asignamos “gameObject” a “objectToFind”.
Al entrar en el modo juego, en la figura 6 vemos en el inspector que el objeto que está en el campo “Object To Find” es el mismo objeto que tiene asignado el Script, puede verse ya que el nombre del objeto en el campo “Object To Find” es el mismo que el nombre del GameObject (en la parte superior de la figura 6).
![](https://gamedevtraum.com/wp-content/uploads/es/desarrollo-de-videojuegos/tutoriales-y-soluciones-para-el-motor-unity/formas-de-encontrar-las-referencias-a-los-gameobjects-en-la-escena-en-unity/referencias-inspector-3.webp)