Menu
CoddyTech

Mostrare e nascondere

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 48 di 85.

SetActive(false) disattiva un intero GameObject: non viene disegnato, non collide più, gli script su di esso smettono di ricevere Update() e anche i suoi figli vengono disattivati. SetActive(true) riattiva tutto, e activeSelf indica se è attivo. Questo script su un pulsante nasconde la porta indicata nel suo campo door quando si fa clic con il mouse:

public GameObject door;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        door.SetActive(false);
    }
}

Uno script che nasconde il proprio oggetto con gameObject.SetActive(false) non può riattivarlo, perché il suo Update() non viene più eseguito. Quindi l'interruttore si trova su un altro oggetto, che contiene un riferimento a quello che mostra e nasconde.

enabled disattiva un componente e lascia invariato il resto dell'oggetto. GetComponent<Renderer>().enabled = false rende invisibile un oggetto, ma il suo collider continua a bloccare le cose: un muro invisibile. Uno script con enabled = false non riceve più chiamate a Update(), ma l'oggetto rimane nella scena, ancora disegnato e ancora in collisione, e gli altri componenti continuano a funzionare.

challenge icon

Sfida

Medio

Fai in modo che la barra spaziatrice nasconda il ponte e lo faccia riapparire.

  1. In Update(), quando viene premuto Input.GetKeyDown(KeyCode.Space), chiama bridge.SetActive(...) per attivare o disattivare l'intero ponte, collider compreso.
  2. Passa lo stato opposto: bridge.SetActive(!bridge.activeSelf);.

Premi «Gioca» e premi la barra spaziatrice alcune volte: il ponte scompare e riappare. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // Space nasconde il ponte e, alla pressione successiva, lo mostra di nuovo
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity