Menu
CoddyTech

OnEnable e OnDisable

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 72 di 85.

OnEnable() viene eseguito ogni volta che uno script diventa attivo: quando il suo oggetto appare per la prima volta (subito dopo Awake()) e di nuovo ogni volta che l'oggetto viene mostrato con SetActive(true) o lo script viene riattivato con enabled = true. OnDisable() viene eseguito ogni volta che l'oggetto viene nascosto, lo script viene disattivato o l'oggetto viene distrutto.

Un portale che un altro script apre e chiude con SetActive può registrare informazioni su se stesso:

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

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

Il portale registra Portal open quando la scena si avvia. Nasconderlo e mostrarlo di nuovo registra prima Portal closed, poi Portal open, mentre Awake() e Start() non vengono eseguiti una seconda volta. Quindi, il codice che deve essere eseguito a ogni apparizione, come reimpostare un timer o contare le visite, va inserito in OnEnable(). Quando il portale è nascosto, il suo Update() non viene eseguito: per questo l'apertura e la chiusura vengono gestite da uno script su un altro oggetto.

challenge icon

Sfida

Medio

Fai in modo che ogni Switchable segnali quando viene attivato e disattivato.

  1. Aggiungi un campo int count; e void OnEnable(): incrementa count di 1, poi registra name + " on (" + count + ")", ad esempio Bubble on (2).
  2. Aggiungi void OnDisable() che registra name + " off".

Premi «Gioca» e premi Spazio: la Console mostra Player on (1), poi Bubble on (1) e Bubble off. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Switchable : MonoBehaviour
{
    public GameObject target;

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

    // Ogni volta che questo oggetto viene attivato: incrementa il conteggio e registra "<name> on (<count>)"
    // Ogni volta che viene disattivato: registra "<name> off"
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity