Menu
CoddyTech

OnEnable et OnDisable

Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 57 sur 67.

OnEnable() s’exécute chaque fois qu’un script devient actif : lorsque son objet apparaît pour la première fois (juste après Awake()), puis chaque fois que l’objet est affiché avec SetActive(true) ou que le script est réactivé avec enabled = true. OnDisable() s’exécute chaque fois que l’objet est masqué, que le script est désactivé ou que l’objet est détruit.

Un portail qu’un autre script ouvre et ferme avec SetActive peut signaler son propre état :

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

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

Le portail affiche Portal open dans les journaux au démarrage de la scène. Le masquer puis l’afficher à nouveau affiche ensuite Portal closed, puis Portal open, tandis que Awake() et Start() ne s’exécutent pas une deuxième fois. Ainsi, le code qui doit s’exécuter à chaque apparition, comme la réinitialisation d’un minuteur ou le comptage des visites, se place dans OnEnable(). Lorsque le portail est masqué, son Update() ne s’exécute pas, c’est pourquoi son ouverture et sa fermeture sont effectuées par un script sur un autre objet.

challenge icon

Défi

Moyen

Le script Switchable se trouve sur le Player et sur son bouclier, le Bubble, qui est masqué au départ. Sur le Player, target correspond au Bubble, et la touche Espace active et désactive le Bubble ; cette partie est déjà écrite.

Fais en sorte que chaque Switchable rende compte de son état :

  • chaque fois qu’il est activé, ajoute 1 à un compteur et consigne son nom, on et le compteur entre parenthèses, par exemple Bubble on (2) ;
  • chaque fois qu’il est désactivé, consigne son nom et off : Bubble off.

Au démarrage du jeu, le Player consigne Player on (1) : il est lui aussi activé. Appuie sur Jouer, appuie quelques fois sur Espace, puis clique sur Vérifier.

Essayez vous-même

using UnityEngine;

public class Switchable : MonoBehaviour
{
    public GameObject target;

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

    // À chaque activation de cet objet : incrémentez le compteur et affichez dans le journal "<name> on (<count>)"
    // À chaque désactivation : affichez dans le journal "<name> off"
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les bases du scripting dans Unity