Menu
CoddyTech

Mostrar e ocultar

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 48 de 85.

SetActive(false) desativa um GameObject inteiro: ele não é desenhado, deixa de colidir, os scripts nele param de receber Update(), e seus filhos também são desativados. SetActive(true) reativa tudo, e activeSelf informa se ele está ativo. Este script em um botão esconde a porta indicada em seu campo door quando o mouse é clicado:

public GameObject door;

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

Um script que esconde o próprio objeto com gameObject.SetActive(false) não consegue reativá-lo, porque seu Update() deixa de ser executado. Por isso, o interruptor fica em outro objeto, com uma referência àquele que ele mostra e esconde.

enabled desativa um componente e deixa o restante do objeto como está. GetComponent<Renderer>().enabled = false torna um objeto invisível, mas seu colisor ainda bloqueia as coisas: uma parede invisível. Um script com enabled = false não recebe mais chamadas de Update(), mas o objeto permanece na cena, ainda desenhado e colidindo, e seus outros componentes continuam funcionando.

challenge icon

Desafio

Médio

Use a barra de espaço para esconder a ponte e fazê-la voltar.

  1. Em Update(), ao detectar Input.GetKeyDown(KeyCode.Space), chame bridge.SetActive(...) para alternar a ponte inteira, incluindo o colisor.
  2. Passe o oposto do estado dela: bridge.SetActive(!bridge.activeSelf);.

Pressione “Jogar” e aperte a barra de espaço algumas vezes: a ponte desaparece e volta. Em seguida, clique em “Verificar”.

Experimente você mesmo

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // Space esconde a ponte, e o próximo pressionamento a mostra novamente
    }
}

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity