Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Das 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, on und den Zähler in Klammern, zum Beispiel Bubble 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"
}
quiz iconTeste dich selbst

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