Menu
CoddyTech

Wiederholt aufrufen, Aufruf abbrechen

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 22 von 63.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) ruft Blink zum ersten Mal nach 0.5 Sekunden auf und danach alle 0.5 Sekunden erneut, bis der Aufruf abgebrochen wird. Die erste Zahl ist die Verzögerung vor dem ersten Aufruf, die zweite die Zeit zwischen den Aufrufen. CancelInvoke(nameof(Blink)) stoppt ihn, und CancelInvoke() ohne Namen stoppt alle Invoke-Aufrufe, die das Skript eingeplant hat.

Diese Warnleuchte blinkt, bis die Leertaste gedrückt wird, und bleibt dann eingeschaltet:

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;
    }
}

Der Timer aus dem Kapitel zum Spawnen würde dieselbe Aufgabe mit einem float-Feld und einer Prüfung in Update() erledigen. Bei InvokeRepeating verwaltet Unity die Zeit und führt die Aufrufe aus. Der Aufruf von InvokeRepeating gehört in Start(): In Update() würde bei jedem Frame ein weiterer wiederholter Aufruf eingeplant.

challenge icon

Aufgabe

Einfach

Der Geysir schleudert den Ball, der auf ihm liegt, in die Luft. Sein Skript hat den ball, die power und einen eruptions-Zähler. Lass ihn nach einem Zeitplan ausbrechen:

  • Der erste Ausbruch erfolgt 1 Sekunde nach Play, danach alle 2 Sekunden.
  • Ein Ausbruch ist eine Methode namens Erupt: Sie erhöht eruptions um 1, stößt den Ball mit ball.AddForce(Vector3.up * power, ForceMode.Impulse) nach oben und protokolliert Eruption 1, Eruption 2 und so weiter.
  • Nach dem dritten Ausbruch hört der Geysir endgültig auf.

Drücke Play und beobachte den Ball, dann Check.

Probier es selbst

using UnityEngine;

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

    void Start()
    {
        // 1 Sekunde nach Play ausbrechen, danach alle 2 Sekunden
    }

    // Erupt(): zählen, ball nach oben stoßen, protokollieren; nach dem dritten Mal stoppen
}
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 Physik und Gameplay