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.
Sfida
MedioFai in modo che ogni Switchable segnali quando viene attivato e disattivato.
- Aggiungi un campo
int count;evoid OnEnable(): incrementacountdi 1, poi registraname + " on (" + count + ")", ad esempioBubble on (2). - Aggiungi
void OnDisable()che registraname + " 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
1Nozioni di base di C# in Unity
Ciao, UnityVariabiliI numeri decimali richiedono una fTesto nella ConsoleVariabili che ricordanoIf ed ElseConfrontare i numeriRipasso: il collezionista di monete7Cicli e metodi
Ripeti con forCicli annidatiScrivere un metodoMetodi che restituiscono valoriArrayRiepilogo: scala10Trovare gli oggetti
Trovare per nomeTagTrovare per tipoI riferimenti battono la ricercaIl null di UnityRipasso: la moneta più vicina13Progetto: Schiva i blocchi
Il corridoreBlocchi dal cielo2Fallo muovere
Posiziona il cuboMuovilo a ogni frameRuotalo ogni secondoGuidalo con i tastiRiepilogo: guida il cubo5Vettori
Somma di vettoriDirezioniSpazio locale e spazio mondoVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni8GameObject e componenti
Riferimenti nell'InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRiepilogo: interruttore della luce3L’Inspector
Campi dell’InspectorSerializeFieldNumeri decimali e MathfAttributi dell’InspectorRiepilogo: ascensore6Trasformazioni e gerarchia
Genitori e figliIssare la bandieraScalaOsservare gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita9Progetto: Acchiappa la stella
Il raccoglitoreUna stella cadente12Il ciclo di vita dello script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL'ordine del ciclo di vitaRiepilogo: Lifecycle LoggerEsercitati da solo: Playground Unity