OnEnable und OnDisable
Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 57 von 67.
OnEnable() wird jedes Mal ausgeführt, wenn ein Skript aktiv wird: wenn sein Objekt zum ersten Mal erscheint (direkt nach Awake()) und erneut jedes Mal, wenn das Objekt mit SetActive(true) eingeblendet oder das Skript mit enabled = true wieder eingeschaltet wird. OnDisable() wird jedes Mal ausgeführt, wenn das Objekt ausgeblendet, das Skript ausgeschaltet oder das Objekt zerstört wird.
Ein Portal, das ein anderes Skript mit SetActive öffnet und schließt, kann über sich selbst Meldungen ausgeben:
void OnEnable()
{
Debug.Log("Portal open");
}
void OnDisable()
{
Debug.Log("Portal closed");
}Das Portal protokolliert Portal open, wenn die Szene startet. Wird es ausgeblendet und erneut eingeblendet, werden Portal closed und dann Portal open protokolliert, während Awake() und Start() nicht ein zweites Mal ausgeführt werden. Code, der bei jedem Erscheinen ausgeführt werden muss, etwa zum Zurücksetzen eines Timers oder zum Zählen von Besuchen, gehört also in OnEnable(). Solange das Portal ausgeblendet ist, wird sein Update() nicht ausgeführt. Deshalb übernimmt ein Skript auf einem anderen Objekt das Öffnen und Schließen.
Aufgabe
MittelDas Switchable-Skript befindet sich auf dem Player und auf seinem Schild, der Bubble, die anfangs verborgen ist. Beim Player ist target die Bubble, und mit der Leertaste wird die Bubble ein- und ausgeschaltet; dieser Teil ist bereits geschrieben.
Sorge dafür, dass jedes Switchable über sich selbst berichtet:
- füge jedes Mal, wenn es eingeschaltet wird, 1 zu einem Zähler hinzu und protokolliere seinen Namen,
onund den Zähler in Klammern, zum BeispielBubble on (2); - protokolliere jedes Mal, wenn es ausgeschaltet wird, seinen Namen und
off:Bubble off.
Wenn das Spiel startet, protokolliert der Player Player on (1): Auch er wird eingeschaltet. Drücke auf Play, drücke ein paarmal die Leertaste und dann auf Check.
Probier es selbst
using UnityEngine;
public class Switchable : MonoBehaviour
{
public GameObject target;
void Update()
{
if (target != null && Input.GetKeyDown(KeyCode.Space))
{
target.SetActive(!target.activeSelf);
}
}
// Jedes Mal, wenn dieses Objekt eingeschaltet wird: Zähle den Vorgang und protokolliere "<name> on (<count>)"
// Jedes Mal, wenn es ausgeschaltet wird: Protokolliere "<name> off"
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen des Scripting in Unity
1Dein erstes Skript
Hallo, UnityPlatziere den WürfelBewege dich in jedem FrameDrehe dich jede SekundeSteuere mit den TastenRückblick: Steuere den Würfel4Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist ein StructRückblick: Drohnenpilot7Projekt: Fang den Stern
Der FängerEin fallender Stern10Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle Logger5Transformationen und Hierarchie
Eltern und KinderSkalierungDinge ansehenAuf einen Punkt zubewegenRückblick: Umlaufender Mond8Dinge finden
Nach Namen findenTagsNach Typ findenReferenzen schlagen FindUnitys NullRückblick: Nächste Münze11Projekt: Weiche den Blöcken aus
Der LäuferFallende Blöcke6GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter