Menu
CoddyTech

OnEnable e OnDisable

Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 57 de 67.

OnEnable() é executado toda vez que um script se torna ativo: quando seu objeto aparece pela primeira vez (logo após Awake()) e novamente cada vez que o objeto é exibido com SetActive(true) ou o script é reativado com enabled = true. OnDisable() é executado cada vez que o objeto é ocultado, o script é desativado ou o objeto é destruído.

Um portal que outro script abre e fecha com SetActive pode informar sobre si mesmo:

void OnEnable()
{
    Debug.Log("Portal open");
}

void OnDisable()
{
    Debug.Log("Portal closed");
}

O portal registra Portal open quando a cena começa. Ocultá-lo e exibi-lo novamente registra Portal closed e, em seguida, Portal open, enquanto Awake() e Start() não são executados uma segunda vez. Portanto, o código que precisa ser executado a cada aparição, como reiniciar um cronômetro ou contar visitas, deve ficar em OnEnable(). Enquanto o portal está oculto, seu Update() não é executado, por isso a abertura e o fechamento são feitos por um script em outro objeto.

challenge icon

Desafio

Médio

O script Switchable está no Player e em seu escudo, o Bubble, que começa oculto. No Player, target é o Bubble, e a tecla Space liga e desliga o Bubble; essa parte já está escrita.

Faça cada Switchable informar sobre si mesmo:

  • cada vez que for ligado, some 1 a um contador e registre seu nome, on e o contador entre parênteses, por exemplo, Bubble on (2);
  • cada vez que for desligado, registre seu nome e off: Bubble off.

Quando o jogo começar, o Player registra Player on (1): ele também é ligado. Pressione Play, pressione Space algumas vezes e, em seguida, Check.

Experimente você mesmo

using UnityEngine;

public class Switchable : MonoBehaviour
{
    public GameObject target;

    void Update()
    {
        if (target != null && Input.GetKeyDown(KeyCode.Space))
        {
            target.SetActive(!target.activeSelf);
        }
    }

    // Cada vez que este objeto for ativado: conte a ativação e registre "<name> on (<count>)"
    // Cada vez que ele for desativado: registre "<name> off"
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Noções básicas de scripting no Unity