OnEnable i OnDisable
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 57 z 67.
OnEnable() uruchamia się za każdym razem, gdy skrypt staje się aktywny: gdy jego obiekt pojawia się po raz pierwszy (zaraz po Awake()) oraz ponownie za każdym razem, gdy obiekt zostaje pokazany za pomocą SetActive(true) lub skrypt zostaje ponownie włączony przez enabled = true. OnDisable() uruchamia się za każdym razem, gdy obiekt zostaje ukryty, skrypt zostaje wyłączony lub obiekt zostaje zniszczony.
Portal, który inny skrypt otwiera i zamyka za pomocą SetActive, może informować o swoim stanie:
void OnEnable()
{
Debug.Log("Portal open");
}
void OnDisable()
{
Debug.Log("Portal closed");
}Portal rejestruje Portal open po rozpoczęciu sceny. Ukrycie go i ponowne pokazanie powoduje zarejestrowanie kolejno Portal closed i Portal open, a Awake() i Start() nie uruchamiają się po raz drugi. Dlatego kod, który musi się wykonać przy każdym pojawieniu się obiektu, na przykład resetowanie licznika czasu lub zliczanie wizyt, umieszcza się w OnEnable(). Gdy portal jest ukryty, jego Update() się nie uruchamia, dlatego otwieraniem i zamykaniem zajmuje się skrypt przypisany do innego obiektu.
Wyzwanie
ŚredniSkrypt Switchable znajduje się na obiekcie Player i na jego osłonie, Bubble, która na początku jest ukryta. W obiekcie Player target wskazuje na Bubble, a klawisz spacji włącza i wyłącza Bubble; ta część jest już napisana.
Spraw, aby każdy obiekt Switchable informował o swoim stanie:
- za każdym razem, gdy zostanie włączony, zwiększ licznik o 1 i zapisz w logu jego nazwę,
onoraz licznik w nawiasach, na przykładBubble on (2); - za każdym razem, gdy zostanie wyłączony, zapisz w logu jego nazwę i
off:Bubble off.
Gdy gra się rozpocznie, Player zapisze w logu Player on (1): on również zostaje włączony. Naciśnij Play, kilka razy naciśnij spację, a następnie Check.
Spróbuj swoich sił
using UnityEngine;
public class Switchable : MonoBehaviour
{
public GameObject target;
void Update()
{
if (target != null && Input.GetKeyDown(KeyCode.Space))
{
target.SetActive(!target.activeSelf);
}
}
// Za każdym razem, gdy ten obiekt zostanie włączony: zlicz to i zapisz w dzienniku "<name> on (<count>)"
// Za każdym razem, gdy zostanie wyłączony: zapisz w dzienniku "<name> off"
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Twój pierwszy skrypt
Witaj, UnityUmieść sześcianPoruszaj się w każdej klatceObracaj się co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian4Wektory
Dodawanie wektorówKierunkiPrzestrzeń lokalna i globalnaPrędkość po przekątnejOdległość między obiektamiVector3 jest strukturąPodsumowanie: pilot drona10Cykl życia skryptu
Awake i StartUpdate i LateUpdateOnEnable i OnDisableKolejność cyklu życiaPodsumowanie: rejestrator cyklu życia2Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPodsumowanie: Winda5Transformacje i hierarchia
Rodzice i dzieciSkalaPatrz na obiektyPoruszanie się w kierunku punktuPodsumowanie: Księżyc krążący po orbicie3Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski o nazwachPrzyciski myszyPowtórka: naładowany skok6Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePodsumowanie: włącznik światła