Menu
CoddyTech

Deine erste Coroutine

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

Update() muss in jedem Frame fertig werden und kann daher nicht warten. Eine Coroutine kann das: Sie ist eine Methode, die pausiert und später genau dort fortfährt, wo sie aufgehört hat. Sie gibt IEnumerator zurück, wofür using System.Collections; benötigt wird, und jedes yield return darin ist eine Pause. In C# gibt yield return eine Methode, die ihre Werte einzeln ausgibt; Unity fragt nach dem nächsten Wert, wenn die Wartezeit vorbei ist. yield return null wartet einen Frame, und yield return new WaitForSeconds(3f) wartet 3 Sekunden.

StartCoroutine(Cycle()) startet eine Coroutine. Diese Ampel schaltet auf Grün, 3 Sekunden später auf Gelb und nach einer weiteren Sekunde auf Rot:

using System.Collections;
using UnityEngine;

public class TrafficLight : MonoBehaviour
{
    Renderer lamp;

    void Start()
    {
        lamp = GetComponent<Renderer>();
        StartCoroutine(Cycle());
    }

    IEnumerator Cycle()
    {
        lamp.material.color = Color.green;
        yield return new WaitForSeconds(3f);
        lamp.material.color = Color.yellow;
        yield return new WaitForSeconds(1f);
        lamp.material.color = Color.red;
    }
}

StartCoroutine führt die Coroutine sofort bis zu ihrem ersten yield aus, dann läuft Start() weiter; Unity setzt sie nach jeder Wartezeit fort, wobei ihre lokalen Variablen unverändert bleiben. Ein einfaches Cycle(); ohne StartCoroutine bewirkt nichts: Es erstellt die pausierte Methode und verwirft sie, ohne dass auch nur eine Zeile davon ausgeführt wird. Und yield return 3f; ist keine Wartezeit von 3 Sekunden: Unity kennt nur Warteobjekte wie WaitForSeconds und behandelt jeden anderen Wert als einen Frame.

challenge icon

Aufgabe

Einfach

Die Stacheln warten unter dem Boden. Lass die Leertaste die Falle mit einer Coroutine namens Spring auslösen:

  • Sofort: Click protokollieren.
  • Eine halbe Sekunde später: Die Stacheln springen 1 Einheit nach oben.
  • 2 Sekunden danach: Sie sinken wieder 1 Einheit nach unten.

Drücke Wiedergabe, drücke die Leertaste und beobachte, dann Prüfen.

Probier es selbst

using System.Collections;
using UnityEngine;

public class SpikeTrap : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Löse die Falle mit einer Coroutine aus
        }
    }

    // IEnumerator Spring(): Klicken, 0.5 s warten, 1 Einheit nach oben, 2 s warten, 1 Einheit nach unten
}
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