Menu
CoddyTech

OnEnable e OnDisable

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

OnEnable() é executado toda vez que um script se torna ativo: quando seu objeto aparece pela primeira vez (logo depois de 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 seu próprio estado:

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, e é por isso que a abertura e o fechamento são feitos por um script em outro objeto.

challenge icon

Desafio

Médio

Faça com que cada Switchable informe quando é ativado e desativado.

  1. Adicione um campo int count; e void OnEnable(): some 1 a count e, em seguida, registre name + " on (" + count + ")", como Bubble on (2).
  2. Adicione void OnDisable() para registrar name + " off".

Pressione “Jogar” e pressione Espaço: o Console mostra Player on (1), depois Bubble on (1) e Bubble off. Em seguida, clique em “Verificar”.

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"
}

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

Pratique por conta própria: Playground de Unity