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ę.
Wyzwanie
ŁatwyKolce 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ę
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Fizyka i rozgrywka
1Ciało sztywne
Grawitacja i masaPopychanie za pomocą AddForceSkok z impulsemFixedUpdate dla fizykiPrędkośćCiała kinematycznePowtórka: platforma startowa4Korutyny
WywoływanieInvokeRepeating i CancelInvokeTwoja pierwsza korutynaPętle w korutynachZatrzymywanie korutynPodsumowanie: odliczanie2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur