Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Spraw, aby każdy obiekt Switchable raportował, kiedy jest włączany i wyłączany.

  1. Dodaj pole int count; i metodę void OnEnable(): zwiększ count o 1, a następnie wyświetl w logu name + " on (" + count + ")", na przykład Bubble on (2).
  2. Dodaj metodę void OnDisable(), która wyświetla w logu name + " 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

Poćwicz samodzielnie: Edytor online Unity