OnEnable i OnDisable
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 72 z 85.
OnEnable() uruchamia się za każdym razem, gdy skrypt staje się aktywny: gdy jego obiekt pojawia się po raz pierwszy (zaraz po Awake()) i ponownie za każdym razem, gdy obiekt zostaje wyświetlony 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 zapisuje w logu Portal open, gdy scena się uruchamia. Ukrycie go i ponowne wyświetlenie powoduje zapisanie w logu najpierw Portal closed, a potem Portal open, natomiast Awake() i Start() nie uruchamiają się po raz drugi. Dlatego kod, który musi wykonać się przy każdym pojawieniu, na przykład resetowanie licznika czasu lub zliczanie odwiedzin, umieszcza się w OnEnable(). Gdy portal jest ukryty, jego Update() się nie uruchamia, dlatego otwieranie i zamykanie jest wykonywane przez skrypt na innym obiekcie.
Wyzwanie
ŚredniSpraw, aby każdy obiekt Switchable raportował, kiedy jest włączany i wyłączany.
- Dodaj pole
int count;i metodęvoid OnEnable(): zwiększcounto 1, a następnie wyświetl w loguname + " on (" + count + ")", na przykładBubble on (2). - Dodaj metodę
void OnDisable(), która wyświetla w loguname + " off".
Naciśnij „Graj” i naciśnij spację: w konsoli pojawi się Player on (1), a następnie Bubble on (1) i Bubble off. Następnie naciśnij „Sprawdź”.
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 jest włączany: zlicz to i zapisz w logu "<name> on (<count>)"
// Za każdym razem, gdy jest wyłączany: zapisz w logu "<name> off"
}
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Podstawy C# w Unity
Witaj, UnityZmienneLiczby dziesiętne wymagają fTekst w konsoliZmienne, które pamiętająIf i elsePorównywanie liczbPowtórka: Zbieracz monet4Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski z nazwamiPrzyciski myszyPowtórka: naładowany skok7Pętle i metody
Powtarzaj za pomocą forPętle wewnątrz pętliNapisz metodęMetody, które zwracają wynikTablicePowtórka: schody10Wyszukiwanie obiektów
Wyszukiwanie po nazwieTagiWyszukiwanie po typieReferencje lepsze niż wyszukiwanieNull w UnityPowtórka: najbliższa moneta13Projekt: Unikaj bloków
BiegaczBloki z nieba2Wpraw to w ruch
Umieść sześcianPoruszaj w każdej klatceObracaj co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian5Wektory
Dodawanie wektorówKierunkiPrzestrzeń lokalna i globalnaPrędkość po przekątnejOdległość między obiektamiVector3 to strukturaPodsumowanie: pilot drona8Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePowtórka: włącznik światła3Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPowtórka: winda6Przekształcenia i hierarchia
Rodzice i dzieciWciągnij flagęSkalowaniePatrz na obiektyPorusz się w kierunku punktuPodsumowanie: Księżyc na orbicie12Cykl życia skryptu
Awake i StartUpdate i LateUpdateOnEnable i OnDisableKolejność cyklu życiaPodsumowanie: Rejestrator cyklu życiaPoćwicz samodzielnie: Edytor online Unity