OnEnable und OnDisable
Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 72 von 85.
OnEnable() wird jedes Mal ausgeführt, wenn ein Skript aktiv wird: wenn sein Objekt zum ersten Mal erscheint (direkt nach Awake()) und erneut, wenn das Objekt mit SetActive(true) angezeigt 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 selbst darüber berichten:
void OnEnable()
{
Debug.Log("Portal open");
}
void OnDisable()
{
Debug.Log("Portal closed");
}Das Portal protokolliert Portal open, wenn die Szene startet. Wenn es ausgeblendet und wieder angezeigt wird, werden erst Portal closed und dann Portal open protokolliert, während Awake() und Start() kein 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 daher 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
MittelLass jedes Switchable melden, wenn es ein- und ausgeschaltet wird.
- Füge ein Feld
int count;undvoid OnEnable()hinzu: addiere 1 zucountund gib dannname + " on (" + count + ")"aus, zum BeispielBubble on (2). - Füge
void OnDisable()hinzu, dasname + " off"ausgibt.
Drücke „Spielen“ und dann die Leertaste: In der Konsole wird Player on (1) angezeigt, dann Bubble on (1) und Bubble off. Drücke anschließend „Prüfen“.
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: mitzählen und "<name> on (<count>)" protokollieren
// Jedes Mal, wenn es ausgeschaltet wird: "<name> off" protokollieren
}
Alle Lektionen in Unity-Scripting: Grundlagen
1C#-Grundlagen in Unity
Hallo, UnityVariablenDezimalzahlen brauchen ein fText in der KonsoleVariablen, die sich etwas merkenIf und ElseZahlen vergleichenRückblick: Münzsammler7Schleifen und Methoden
Wiederholen mit forSchleifen in SchleifenEine Methode schreibenMethoden mit RückgabewertArraysRückblick: Treppe10Dinge finden
Nach Namen suchenTagsNach Typ suchenReferenzen schlagen SuchenUnitys NullRückblick: nächste Münze13Projekt: Weiche den Blöcken aus
Der LäuferBlöcke vom Himmel2Bring es in Bewegung
Platziere den WürfelBewege ihn in jedem FrameDrehe ihn jede SekundeSteuere mit den TastenRückblick: Fahre den Würfel5Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist eine StrukturRückblick: Drohnenpilot8GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter11Prefabs und Erzeugen von Instanzen
Prefabs und InstantiateNach Zeitintervall erzeugenIn einem Raster erzeugenListen von ObjektenDas Neueste zurücknehmenZerstörenZufälliges ErzeugenRückblick: Feuerwerk14Abschließende Herausforderungen
MünzmagnetDie Straße überquerenStraßenverkehrTurmbauerLanden oder verfehlen3Der Inspector
Inspector-FelderSerializeFieldFließkommazahlen und MathfInspector-AttributeRückblick: Aufzug6Transformationen und Hierarchie
Eltern und KinderHisse die FlaggeSkalierungDinge anschauenAuf einen Punkt zubewegenRückblick: Mond in Umlaufbahn9Projekt: Fang den Stern
Der FängerEin fallender Stern12Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle LoggerÜbe selbstständig: Unity-Playground