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.
Défi
MoyenLe 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,
onet le compteur entre parenthèses, par exempleBubble 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"
}
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
1Votre premier script
Bonjour, UnityPlacez le cubeBouger à chaque imageTourner chaque secondeDirigez avec les touchesRécapitulatif : conduisez le cube4Vecteurs
Addition de vecteursDirectionsEspaces local et mondeVitesse diagonaleDistance entre les objetsVector3 est une structRécapitulatif : pilote de drone7Projet : Attrape l’étoile
L’attrapeurUne étoile qui tombe10Le cycle de vie d’un script
Awake et StartUpdate et LateUpdateOnEnable et OnDisableL’ordre du cycle de vieRécapitulatif : journaliseur du cycle de vie2L’inspecteur
Champs de l’inspecteurSerializeFieldNombres flottants et MathfAttributs de l’inspecteurRécapitulatif : ascenseur5Transformations et hiérarchie
Parents et enfantsÉchelleRegarder les objetsSe déplacer vers un pointRécapitulatif : Lune en orbite8Rechercher des objets
Rechercher par nomTagsRechercher par typeLes références plutôt que FindLe null de UnityRécapitulatif : la pièce la plus proche11Projet : Esquivez les blocs
Le coureurBlocs qui tombent6GameObjects et composants
Références dans l’InspectorObtenir un composantComposants manquantsAjouter un composantRequireComponentAfficher et masquerRécapitulatif : interrupteur