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

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

Los GameOb­jects son los obje­tos que podemos colo­car en una esce­na en Uni­ty, como mín­i­mo tienen un com­po­nente Trans­form asig­na­do, que per­mite cono­cer su posi­ción, rotación y escala. A estos GameOb­jects se les puede ir aña­di­en­do com­po­nentes y así ir dán­dole un com­por­tamien­to más especí­fi­co. Por ejem­p­lo, una Cámara en Uni­ty es un GameOb­ject sim­ple al cual se le añade el com­po­nente "Cam­era" y el com­po­nente "Audi­oLis­ten­er".

Cuan­do el GameOb­ject está acti­vo en la jer­ar­quía y el juego está cor­rien­do, Uni­ty actu­al­iza per­iódica­mente cada uno de sus com­po­nentes y eje­cu­ta algu­nas otras fun­ciones, todo esto de man­era automáti­ca. Si desac­ti­va­mos el GameOb­ject, tan­to el GameOb­ject como sus com­po­nentes no se actu­alizarán de man­era automáti­ca y lograremos el efec­to de que el GameOb­ject "desa­parez­ca" de la escena.

gameobject vacio en unity para probar activacion y desactivacion
Fig. 1: Un GameOb­ject genéri­co en la jer­ar­quía de una esce­na 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 espe­cial aten­ción al tema de la asi­gnación de la ref­er­en­cia del GameOb­ject que quieres acti­var o desac­ti­var, porque no solo impor­ta la instruc­ción para acti­var un obje­to sino cuál de todos los obje­tos de la esce­na quieres acti­var, Uni­ty no sabrá mági­ca­mente a qué obje­to 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 hac­er que un GameOb­ject se active y desac­tive de man­era inter­mi­tente, por ejem­p­lo cada 1 segun­do. Esto per­mite por ejem­p­lo hac­er una luz parpadeante.

Cómo activar y desactivar manualmente objetos en Unity

Como se men­cionó antes, todo GameOb­ject con­siste como mín­i­mo de un com­po­nente Trans­form. Si selec­cionamos el GameOb­ject en la jer­ar­quía, en el Inspec­tor ver­e­mos esta com­po­nente Trans­form y además los ele­men­tos de la cabecera que se obser­van en las fig­uras 2 y 3.

inspector de un gameobject con el puntero del mouse en la casilla de activacion, casilla marcada
Fig. 2: Casil­la de acti­vación del GameOb­ject, en este momen­to se encuen­tra activo.
inspector de un gameobject con el puntero del mouse en la casilla de activacion, casilla desmarcada
Fig. 3: Casil­la de acti­vación del GameOb­ject, en este momen­to se encuen­tra inactivo.

jerarquía de unity con gameobject inactivo
Fig. 4: El GameOb­ject al estar inac­ti­vo se ve en gris en la jerarquía.

La casil­la sobre la que está colo­ca­do el cur­sor en ambas imá­genes, es la casil­la del esta­do del GameOb­ject, si esta casil­la está mar­ca­da, el GameOb­ject está acti­vo en la esce­na, si la casil­la está des­mar­ca­da, el GameOb­ject está inac­ti­vo en la esce­na y es como si no existiera. En la jer­ar­quía, un obje­to inac­ti­vo se ve como en la figu­ra 4, en un tono más apagado.

Activar y Desactivar GameObject usando Script

Por supuesto podríamos sacar­le más prove­cho a esto si pudiése­mos acti­var y desac­ti­var uno o más GameOb­jects a través de un Script, esto nos per­mi­tiría por ejem­p­lo hac­er apare­cer ene­mi­gos cuan­do el jugador lle­ga a cier­ta parte del mapa, hac­er apare­cer una pan­talla final cuan­do el jugador pierde la par­ti­da y más.

Comence­mos cre­an­do un Script y un GameOb­ject nue­vo en la jer­ar­quía al cual asig­narle el Script.

script en unity llamado just another script
Fig. 5: Creamos un nue­vo Script para hac­er la acti­vación y desac­ti­vación del GameOb­ject por código.
gameobject en unity llamado another game object
Fig. 6: Creamos un GameOb­ject extra para asig­nar el Script que acabamos de crear.

En la figu­ra 7 se puede ver que el nue­vo GameOb­ject tiene asig­na­do el Script que creamos. Esto se puede hac­er arras­tran­do direc­ta­mente el Script o uti­lizan­do el botón Add Com­po­nent y bus­can­do por nom­bre al Script.

inspector de un gameobject con un script creado por el usuario asignado.
Fig. 7: Asig­namos el Script al GameOb­ject crea­do en el paso anterior.

Para poder acti­var o desac­ti­var el GameOb­ject des­de un Script nece­si­ta­mos ten­er la ref­er­en­cia del GameOb­ject que quer­e­mos acti­var o desac­ti­var, así que den­tro de nue­stro Script vamos a definir un GameOb­ject públi­co, en este caso lo he lla­ma­do "gameOb­ject­ToDe­ac­ti­vate", inten­tan­do que el nom­bre refle­je lo más posi­ble la fun­ción que va a desempeñar.

referencia para un gameobject publico en c sharp unity
Fig. 8: Defin­i­mos una ref­er­en­cia públi­ca para un GameOb­ject y le ponemos un nom­bre representativo.

Al definir la ref­er­en­cia públi­ca, este obje­to apare­cerá en el inspec­tor del GameOb­ject que tiene asig­na­do el Script, como vemos en la figu­ra 9, esto nos per­mi­tirá asig­nar man­ual­mente el obje­to que quer­e­mos acti­var y desac­ti­var, en nue­stro caso el primer obje­to que teníamos que se llam­a­ba "GameOb­ject", en la figu­ra 10 se ve cómo se ha rel­lena­do el cam­po con este objeto.

inspector de un gameobject, en el componente del script se puede arrastrar un objeto tipo gameobject
Fig. 9: En el inspec­tor nos aparece un cam­po en el que podemos colo­car un obje­to tipo GameObject.
inspector de un gameobject, en el componente del script se ha arrastrado un objeto tipo gameobject
Fig. 10: Tomamos el primer obje­to y lo arras­tramos al cam­po del inspector.

Instrucción para activar o desactivar un GameObject en Unity

La fun­ción que nos per­mite cam­biar el esta­do de Acti­vación de un GameOb­ject es "SetAc­tive", se tra­ta de un méto­do de pro­gra­mación que recibe como parámetro un val­or booleano (ver­dadero o fal­so) y esta fun­ción se eje­cu­ta sobre la ref­er­en­cia de un GameOb­ject, en este caso usamos la ref­er­en­cia que hemos definido, como se obser­va, en las líneas 22 y 27 de la figu­ra 11, esta­mos desac­ti­van­do y acti­van­do el GameOb­ject respectivamente.

En este ejem­p­lo en par­tic­u­lar lo que hace­mos es chequear si se pul­san las teclas A y D para eje­cu­tar las fun­ciones, cuan­do el jugador pul­sa la tecla A, se eje­cu­ta la instruc­ción "SetActive(false)" que inhab­ili­ta el GameOb­ject y si el jugador pul­sa la tecla D, se eje­cu­ta la instruc­ción "SetActive(true)" que habili­ta el GameObject.

funcion update en unity, lectura de teclas, activacion y desactivacion de gameobjects usando la función set active
Fig. 11: En la fun­ción Update leemos las entradas de tecla­do y real­izamos la acti­vación y desac­ti­vación del GameObject.

Eje­cu­tar esas instruc­ciones es exac­ta­mente equiv­a­lente a mar­car o des­mar­car esa casil­la en el inspec­tor que vimos en las fig­uras 2 y 3.

Scroll al inicio
Secured By miniOrange