Menu
CoddyTech

InvokeRepeating i CancelInvoke

Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 22 z 63.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) wywołuje Blink po raz pierwszy po 0.5 sekundy, a następnie co 0.5 sekundy, aż do anulowania. Pierwsza liczba to opóźnienie przed pierwszym wywołaniem, a druga to czas między wywołaniami. CancelInvoke(nameof(Blink)) zatrzymuje to wywoływanie, a CancelInvoke() bez nazwy zatrzymuje każde wywołanie Invoke zaplanowane przez skrypt.

Ta lampka ostrzegawcza miga, aż zostanie naciśnięty klawisz Space, a potem pozostaje włączona:

Light lamp;

void Start()
{
    lamp = GetComponent<Light>();
    InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}

void Blink()
{
    lamp.enabled = !lamp.enabled;
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        CancelInvoke(nameof(Blink));
        lamp.enabled = true;
    }
}

Licznik czasu z rozdziału o tworzeniu obiektów wykonałby to samo zadanie za pomocą pola typu float i sprawdzenia w Update(). W przypadku InvokeRepeating Unity śledzi czas i wykonuje wywołania. Wywołanie InvokeRepeating umieszcza się w Start(): w Update() planowałoby ono kolejne powtarzające się wywołanie w każdej klatce.

challenge icon

Wyzwanie

Łatwy

Geyser wyrzuca w powietrze piłkę znajdującą się na nim. Jego skrypt zawiera ball, power i licznik eruptions. Spraw, by wybuchał według harmonogramu:

  • Pierwszy wybuch następuje 1 sekundę po naciśnięciu Graj, a następnie kolejny co 2 sekundy.
  • Wybuch jest metodą o nazwie Erupt: zwiększa eruptions o 1, wypycha piłkę w górę za pomocą ball.AddForce(Vector3.up * power, ForceMode.Impulse) i zapisuje w logu Eruption 1, Eruption 2 i tak dalej.
  • Po trzecim wybuchu gejzer zatrzymuje się na dobre.

Naciśnij Graj i obserwuj piłkę, a następnie naciśnij Sprawdź.

Spróbuj swoich sił

using UnityEngine;

public class Geyser : MonoBehaviour
{
    public Rigidbody ball;
    public float power = 6f;
    int eruptions;

    void Start()
    {
        // Wywołaj erupcję 1 sekundę po Play, a następnie co 2 sekundy
    }

    // Erupt(): zlicz erupcje, wypchnij piłkę w górę, zapisz informację w dzienniku; zatrzymaj po trzeciej erupcji
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Fizyka i rozgrywka