Menu
CoddyTech

Wiederholt aufrufen, Aufruf abbrechen

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 23 von 71.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) ruft Blink zum ersten Mal nach 0.5 Sekunden auf, dann wieder alle 0.5 Sekunden, 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)) beendet ihn, und CancelInvoke() ohne Namen beendet 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 Erzeugen würde denselben Zweck mit einem float-Feld und einer Prüfung in Update() erfüllen. 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

Lass den Geysir nach einem Zeitplan dreimal ausbrechen.

  1. Rufe in Start() InvokeRepeating(nameof(Erupt), 1f, 2f); auf.
  2. Schreibe void Erupt(): Addiere 1 zu eruptions, rufe ball.AddForce(Vector3.up * power, ForceMode.Impulse); auf und protokolliere "Eruption " + eruptions.
  3. Rufe am Ende von Erupt(), wenn eruptions == 3, CancelInvoke(nameof(Erupt)); auf.

Drücke „Spielen“: Der Ball wird dreimal im Abstand von 2 Sekunden nach oben geschleudert. Drücke anschließend „Prüfen“.

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, den Ball nach oben stoßen, protokollieren; nach dem dritten Mal stoppen
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground