OnEnable y OnDisable
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 57 de 67.
OnEnable() se ejecuta cada vez que un script se activa: cuando su objeto aparece por primera vez (justo después de Awake()) y de nuevo cada vez que el objeto se muestra con SetActive(true) o se vuelve a activar el script con enabled = true. OnDisable() se ejecuta cada vez que el objeto se oculta, se desactiva el script o se destruye el objeto.
Un portal que otro script abre y cierra con SetActive puede informar sobre sí mismo:
void OnEnable()
{
Debug.Log("Portal open");
}
void OnDisable()
{
Debug.Log("Portal closed");
}El portal registra Portal open cuando comienza la escena. Al ocultarlo y volver a mostrarlo, registra Portal closed y después Portal open, mientras que Awake() y Start() no se ejecutan por segunda vez. Así que el código que debe ejecutarse cada vez que aparece, como reiniciar un temporizador o contar visitas, va en OnEnable(). Mientras el portal está oculto, su Update() no se ejecuta, por eso la apertura y el cierre se realizan mediante un script en otro objeto.
Desafío
IntermedioEl script Switchable está en el Player y en su escudo, la Bubble, que empieza oculta. En el Player, target es la Bubble, y la barra espaciadora activa y desactiva la Bubble; esa parte ya está escrita.
Haz que cada Switchable informe sobre sí mismo:
- cada vez que se active, suma 1 a un contador y registra su nombre,
ony el contador entre corchetes, por ejemplo,Bubble on (2); - cada vez que se desactive, registra su nombre y
off:Bubble off.
Cuando empieza el juego, el Player registra Player on (1): también se activa. Pulsa Play, pulsa la barra espaciadora unas cuantas veces y luego Check.
Pruébalo tú mismo
using UnityEngine;
public class Switchable : MonoBehaviour
{
public GameObject target;
void Update()
{
if (target != null && Input.GetKeyDown(KeyCode.Space))
{
target.SetActive(!target.activeSelf);
}
}
// Cada vez que se active este objeto: cuenta la activación y registra "<name> on (<count>)"
// Cada vez que se desactive: registra "<name> off"
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos de scripting en Unity
1Tu primer script
Hola, UnityColoca el cuboMuévete en cada fotogramaGira cada segundoDirige con las teclasRepaso: conduce el cubo4Vectores
Sumar vectoresDireccionesEspacio local y globalVelocidad diagonalDistancia entre objetosVector3 es una estructuraRepaso: piloto de dron7Proyecto: Atrapa la estrella
El atrapadorUna estrella fugaz10El ciclo de vida de los scripts
Awake y StartUpdate y LateUpdateOnEnable y OnDisableEl orden del ciclo de vidaRepaso: registrador del ciclo de vida2El Inspector
Campos del InspectorSerializeFieldNúmeros decimales y MathfAtributos del InspectorRepaso: Ascensor5Transformaciones y jerarquía
Padres e hijosEscalaMirar objetosMoverse hacia un puntoRepaso: Luna en órbita8Encontrar cosas
Buscar por nombreEtiquetasBuscar por tipoLas referencias superan a FindEl valor nulo de UnityRepaso: la moneda más cercana11Proyecto: Esquiva los bloques
El corredorBloques que caen6GameObjects y componentes
Referencias en el InspectorObtener un componenteComponentes faltantesAñadir un componenteRequireComponentMostrar y ocultarRepaso: interruptor de luz