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, tanto el GameObject como sus componentes no se actualizarán de manera automática y lograremos el efecto de que el GameObject «desaparezca» de la escena.

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



Tengo 2 vídeos que te van a servir para activar y desactivar GameObjects en Unity

#1 – Cómo activar y desactivar GameObjects a través de código

En este primer vídeo hay que prestar especial atención al tema de la asignación de la referencia del GameObject que quieres activar o desactivar, porque no solo importa la instrucción para activar un objeto sino cuál de todos los objetos de la escena quieres activar, Unity no sabrá mágicamente a qué objeto te refieres, tienes que decírselo.




#2 – Cómo activar y desactivar GameObject de manera intermitente a través de código

En este otro vídeo vemos cómo hacer que un GameObject se active y desactive de manera intermitente, por ejemplo cada 1 segundo. Esto permite por ejemplo hacer una luz parpadeante.



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.



Scroll al inicio
Secured By miniOrange