Menu
CoddyTech

OnEnable y OnDisable

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 57 de 67.

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

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, registra Portal closed y después Portal open, mientras que Awake() y Start() no se ejecutan por segunda vez. Así que el código que debe ejecutarse cada vez que aparece, como reiniciar un temporizador o contar visitas, va en OnEnable(). Mientras el portal está oculto, su Update() no se ejecuta, por eso la apertura y el cierre se realizan mediante un script en otro objeto.

challenge icon

Desafío

Intermedio

El script Switchable está en el Player y en su escudo, la Bubble, que empieza oculta. En el Player, target es la Bubble, y la barra espaciadora activa y desactiva la Bubble; esa parte ya está escrita.

Haz que cada Switchable informe sobre sí mismo:

  • cada vez que se active, suma 1 a un contador y registra su nombre, on y el contador entre corchetes, por ejemplo, Bubble on (2);
  • cada vez que se desactive, registra su nombre y off: Bubble off.

Cuando empieza el juego, el Player registra Player on (1): también se activa. Pulsa Play, pulsa la barra espaciadora unas cuantas veces y luego Check.

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: cuenta la activación y registra "<name> on (<count>)"
    // Cada vez que se desactive: registra "<name> off"
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos de scripting en Unity