OnEnable e OnDisable
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 57 di 67.
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ò segnalare il proprio stato:
void OnEnable()
{
Debug.Log("Portal open");
}
void OnDisable()
{
Debug.Log("Portal closed");
}Il portale registra Portal open quando la scena inizia. Nasconderlo e mostrarlo di nuovo registra 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 azzerare un timer o contare le visite, va inserito in OnEnable(). Quando il portale è nascosto, il suo Update() non viene eseguito, ed è per questo che l'apertura e la chiusura vengono gestite da uno script su un altro oggetto.
Sfida
MedioLo script Switchable è sul Player e sul suo scudo, la Bubble, che inizialmente è nascosto. Sul Player, target è la Bubble e la barra spaziatrice attiva e disattiva la Bubble; questa parte è già stata scritta.
Fai in modo che ogni Switchable segnali le proprie attivazioni:
- ogni volta che viene attivato, aggiungi 1 a un conteggio e registra il suo nome,
one il conteggio tra parentesi, ad esempioBubble on (2); - ogni volta che viene disattivato, registra il suo nome e
off:Bubble off.
Quando il gioco inizia, il Player registra Player on (1): anche lui viene attivato. Premi Play, premi la barra spaziatrice alcune volte, poi Check.
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: conta l'attivazione e registra "<name> on (<count>)"
// Ogni volta che viene disattivato: registra "<name> off"
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti di scripting in Unity
1Il tuo primo script
Ciao, UnityPosiziona il cuboMuovi a ogni frameRuota ogni secondoGuida con i tastiRiepilogo: guida il cubo4Vettori
Sommare vettoriDirezioniSpazio locale e spazio globaleVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni7Progetto: Acchiappa la stella
L'acchiappatoreUna stella cadente10Il ciclo di vita degli script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL’ordine del ciclo di vitaRipasso: logger del ciclo di vita2L'Inspector
Campi dell'InspectorSerializeFieldNumeri decimali e MathfAttributi dell'InspectorRiepilogo: Ascensore5Trasformazioni e gerarchia
Genitori e figliScalaGuarda gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita6Oggetti di gioco e componenti
Riferimenti nell’InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRipasso: interruttore della luce