Menu
CoddyTech

Twoja pierwsza korutyna

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

Update() musi kończyć się w każdej klatce, więc nie może czekać. Korutyna może: to metoda, która wstrzymuje działanie i wznawia je później dokładnie w miejscu, w którym je przerwała. Zwraca IEnumerator, do którego potrzebne jest using System.Collections;, a każde yield return w niej oznacza pauzę. W C# yield return tworzy metodę, która udostępnia wartości pojedynczo; Unity prosi o następną, gdy kończy się oczekiwanie. yield return null czeka jedną klatkę, a yield return new WaitForSeconds(3f) czeka 3 sekundy.

StartCoroutine(Cycle()) uruchamia korutynę. To światło drogowe zmienia kolor na zielony, po 3 sekundach na żółty, a po kolejnej sekundzie na czerwony:

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 natychmiast wykonuje korutynę aż do pierwszego yield, a potem Start() działa dalej; Unity wznawia korutynę po każdym oczekiwaniu, zachowując jej zmienne lokalne. Samo Cycle(); bez StartCoroutine nic nie robi: tworzy wstrzymaną metodę i ją odrzuca, więc nie wykona się ani jedna jej linia. A yield return 3f; nie oznacza 3-sekundowego oczekiwania: Unity rozpoznaje tylko obiekty oczekiwania, takie jak WaitForSeconds, a każdą inną wartość traktuje jako jedną klatkę.

challenge icon

Wyzwanie

Łatwy

Kolce czekają pod podłogą. Spraw, by klawisz Space uruchamiał pułapkę za pomocą korutyny o nazwie Spring:

  • Natychmiast: wyświetl w logu Click.
  • Po pół sekundy: kolce wyskakują o 1 jednostkę w górę.
  • Po kolejnych 2 sekundach: opadają z powrotem o 1 jednostkę.

Naciśnij Graj, naciśnij Space i obserwuj, a następnie naciśnij Sprawdź.

Spróbuj swoich sił

using System.Collections;
using UnityEngine;

public class SpikeTrap : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Uruchom pułapkę za pomocą korutyny
        }
    }

    // IEnumerator Spring(): Kliknij, poczekaj 0.5 s, przesuń w górę o 1 jednostkę, poczekaj 2 s, przesuń w dół o 1 jednostkę
}
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