Menu
CoddyTech

OnEnable y OnDisable

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 72 de 85.

OnEnable() se ejecuta cada vez que un script se activa: cuando su objeto aparece por primera vez (justo después de Awake()) y cada vez que el objeto se muestra con SetActive(true) o el script se vuelve a activar con enabled = true. OnDisable() se ejecuta cada vez que el objeto se oculta, el script se desactiva o el objeto se destruye.

Un portal que otro script abre y cierra con SetActive puede informar sobre sí mismo:

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

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

El portal registra Portal open cuando comienza la escena. Al ocultarlo y volver a mostrarlo, se registran Portal closed y después Portal open, mientras que Awake() y Start() no se ejecutan por segunda vez. Por eso, el código que debe ejecutarse cada vez que aparece, como reiniciar un temporizador o contar las visitas, va en OnEnable(). Mientras el portal está oculto, su Update() no se ejecuta, por lo que la apertura y el cierre los realiza un script en otro objeto.

challenge icon

Desafío

Intermedio

Haz que cada Switchable informe cuando se active y se desactive.

  1. Añade un campo int count; y void OnEnable(): suma 1 a count y luego registra name + " on (" + count + ")", como Bubble on (2).
  2. Añade void OnDisable() que registre name + " off".

Pulsa «Jugar» y pulsa la barra espaciadora: la consola muestra Player on (1), luego Bubble on (1) y Bubble off. Después, pulsa «Comprobar».

Pruébalo tú mismo

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 se active este objeto: cuéntalo y registra "<name> on (<count>)"
    // Cada vez que se desactive: registra "<name> off"
}

Todas las lecciones de Fundamentos de scripting en Unity

Practica por tu cuenta: Playground de Unity