Cómo activar y desactivar GameObjects desde un Script en Unity

Introducción – ¿Por qué activar y desactivar GameObjects?

Los GameObjects son los objetos que podemos colocar en una escena en Unity, como mínimo tienen un componente Transform asignado, que permite conocer su posición, rotación y escala. A estos GameObjects se les puede ir añadiendo componentes y así ir dándole un comportamiento más específico. Por ejemplo, una Cámara en Unity es un GameObject simple al cual se le añade el componente «Camera» y el componente «AudioListener».

Cuando el GameObject está activo en la jerarquía y el juego esté corriendo, Unity actualiza periódicamente cada uno de sus componentes y ejecuta algunas otras funciones, todo esto de manera automática. Si desactivamos el GameObject, este proceso no se llevará a cabo y lograremos el efecto de que el GameObject «desaparezca» de la escena.

👆 Análisis completo sobre GameObjects

gameobject vacio en unity para probar activacion y desactivacion
Fig. 1: Un GameObject genérico en la jerarquía de una escena en Unity.

Activar y desactivar GameObjects a través de código 👉

MIRA MI EXPERIMENTO MÁS RECIENTE
👇
piston cylinder arrangement made in unity
(CLICK PARA VER EN YOUTUBE)

Cómo activar y desactivar manualmente objetos en Unity

Como se mencionó antes, todo GameObject consiste como mínimo de un componente Transform. Si seleccionamos el GameObject en la jerarquía, en el Inspector veremos esta componente Transform y además los elementos de la cabecera que se observan en las figuras 2 y 3.

inspector de un gameobject con el puntero del mouse en la casilla de activacion, casilla marcada
Fig. 2: Casilla de activación del GameObject, en este momento se encuentra activo.
inspector de un gameobject con el puntero del mouse en la casilla de activacion, casilla desmarcada
Fig. 3: Casilla de activación del GameObject, en este momento se encuentra inactivo.

jerarquía de unity con gameobject inactivo
Fig. 4: El GameObject al estar inactivo se ve en gris en la jerarquía.

La casilla sobre la que está colocado el cursor en ambas imágenes, es la casilla del estado del GameObject, si esta casilla está marcada, el GameObject está activo en la escena, si la casilla está desmarcada, el GameObject está inactivo en la escena y es como si no existiera. En la jerarquía, un objeto inactivo se ve como en la figura 4, en un tono más apagado.

Activar y Desactivar GameObject usando Script

Por supuesto podríamos sacarle más provecho a esto si pudiésemos activar y desactivar uno o más GameObjects a través de un Script, esto nos permitiría por ejemplo hacer aparecer enemigos cuando el jugador llega a cierta parte del mapa, hacer aparecer una pantalla final cuando el jugador pierde la partida y más.

Comencemos creando un Script y un GameObject nuevo en la jerarquía al cual asignarle el Script.

script en unity llamado just another script
Fig. 5: Creamos un nuevo Script para hacer la activación y desactivación del GameObject por código.
gameobject en unity llamado another game object
Fig. 6: Creamos un GameObject extra para asignar el Script que acabamos de crear.

En la figura 7 se puede ver que el nuevo GameObject tiene asignado el Script que creamos. Esto se puede hacer arrastrando directamente el Script o utilizando el botón Add Component y buscando por nombre al Script.

inspector de un gameobject con un script creado por el usuario asignado.
Fig. 7: Asignamos el Script al GameObject creado en el paso anterior.

Para poder activar o desactivar el GameObject desde un Script necesitamos tener la referencia del GameObject que queremos activar o desactivar, así que dentro de nuestro Script vamos a definir un GameObject público, en este caso lo he llamado «gameObjectToDeactivate», intentando que el nombre refleje lo más posible la función que va a desempeñar.

referencia para un gameobject publico en c sharp unity
Fig. 8: Definimos una referencia pública para un GameObject y le ponemos un nombre representativo.

Al definir la referencia pública, este objeto aparecerá en el inspector del GameObject que tiene asignado el Script, como vemos en la figura 9, esto nos permitirá asignar manualmente el objeto que queremos activar y desactivar, en nuestro caso el primer objeto que teníamos que se llamaba «GameObject», en la figura 10 se ve cómo se ha rellenado el campo con este objeto.

inspector de un gameobject, en el componente del script se puede arrastrar un objeto tipo gameobject
Fig. 9: En el inspector nos aparece un campo en el que podemos colocar un objeto tipo GameObject.
inspector de un gameobject, en el componente del script se ha arrastrado un objeto tipo gameobject
Fig. 10: Tomamos el primer objeto y lo arrastramos al campo del inspector.

Instrucción para activar o desactivar un GameObject en Unity

La función que nos permite cambiar el estado de Activación de un GameObject es «SetActive«, se trata de un método de programación que recibe como parámetro un valor booleano (verdadero o falso) y esta función se ejecuta sobre la referencia de un GameObject, en este caso usamos la referencia que hemos definido, como se observa, en las líneas 22 y 27 de la figura 11, estamos desactivando y activando el GameObject respectivamente.

En este ejemplo en particular lo que hacemos es chequear si se pulsan las teclas A y D para ejecutar las funciones, cuando el jugador pulsa la tecla A, se ejecuta la instrucción «SetActive(false)» que inhabilita el GameObject y si el jugador pulsa la tecla D, se ejecuta la instrucción «SetActive(true)» que habilita el GameObject.

funcion update en unity, lectura de teclas, activacion y desactivacion de gameobjects usando la función set active
Fig. 11: En la función Update leemos las entradas de teclado y realizamos la activación y desactivación del GameObject.

Ejecutar esas instrucciones es exactamente equivalente a marcar o desmarcar esa casilla en el inspector que vimos en las figuras 2 y 3.

Secured By miniOrange