Menu
CoddyTech

InvokeRepeating i CancelInvoke

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

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, druga — czas między wywołaniami. CancelInvoke(nameof(Blink)) zatrzymuje je, a CancelInvoke() bez nazwy zatrzymuje każde wywołanie Invoke zaplanowane przez skrypt.

Ta lampka ostrzegawcza miga, dopóki nie naciśniesz spacji, 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;
    }
}

Timer z rozdziału o pojawianiu się obiektów wykonałby to samo zadanie za pomocą pola float i sprawdzenia w Update(). W przypadku InvokeRepeating Unity sam pilnuje czasu i wykonuje wywołania. Wywołanie InvokeRepeating należy umieścić w Start(): w Update() zaplanowałoby kolejne powtarzające się wywołanie w każdej klatce.

challenge icon

Wyzwanie

Łatwy

Spraw, aby gejzer wybuchał trzy razy według harmonogramu.

  1. W Start() wywołaj InvokeRepeating(nameof(Erupt), 1f, 2f);.
  2. Napisz void Erupt(): dodaj 1 do eruptions, wywołaj ball.AddForce(Vector3.up * power, ForceMode.Impulse); i zaloguj "Eruption " + eruptions.
  3. Na końcu Erupt(), gdy eruptions == 3, wywołaj CancelInvoke(nameof(Erupt));.

Naciśnij „Graj”: piłka zostanie wyrzucona w górę trzy razy, w odstępach 2 sekund. 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 Erupt 1 sekundę po Play, a potem co 2 sekundy
    }

    // Erupt(): zlicz wybuchy, wypchnij piłkę w górę, zapisz informację w logu; zakończ po trzecim wybuchu
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity