Twoja pierwsza korutyna
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 24 z 71.
Update() musi kończyć działanie w każdej klatce, więc nie może czekać. Korutyna może: to metoda, która się wstrzymuje, a później wznawia działanie od miejsca, w którym się zatrzymała. Zwraca IEnumerator, do którego potrzebne jest using System.Collections;, a każde yield return w niej oznacza przerwę. W języku C# yield return sprawia, że metoda przekazuje swoje wartości po jednej; Unity prosi o następną, gdy upłynie czas oczekiwania. yield return null czeka jedną klatkę, a yield return new WaitForSeconds(3f) czeka 3 sekundy.
StartCoroutine(Cycle()) uruchamia korutynę. To światło drogowe zapala się na zielono, po 3 sekundach na żółto, a po kolejnej sekundzie na czerwono:
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 od razu uruchamia korutynę do pierwszego yield, a potem Start() kontynuuje działanie; Unity wznawia korutynę po każdym oczekiwaniu, zachowując wartości jej zmiennych lokalnych. Samo Cycle(); bez StartCoroutine nic nie robi: tworzy wstrzymaną metodę i ją porzuca, więc nie wykonuje się ani jedna linijka jej kodu. A yield return 3f; nie oznacza oczekiwania 3 sekund: Unity rozpoznaje tylko obiekty oczekiwania, takie jak WaitForSeconds, a każdą inną wartość traktuje jako jedną klatkę.
Wyzwanie
ŁatwySpraw, by naciśnięcie spacji uruchamiało pułapkę z kolcami za pomocą korutyny.
- Napisz
IEnumerator Spring(): zapisz w loguClick,yield return new WaitForSeconds(0.5f);, a następnietransform.position += Vector3.up;. - Następnie odczekaj w ten sam sposób 2 sekundy i ponownie odejmij
Vector3.up. - W instrukcji
ifdla spacji uruchom ją za pomocąStartCoroutine(Spring());.
Naciśnij „Graj” i spację: kolce podskoczą, a potem opadną. 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, odczekaj 0.5 s, przesuń w górę o 1 jednostkę, odczekaj 2 s, przesuń w dół o 1 jednostkę
}
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: odliczanie10Projekt: Ucieczka z areny
ArenaŁowcy2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur5Projekt: Wyścig po monety
Tocząca się piłkaZbieranie monet3Wyzwalacze
Kolizje wyzwalająceOnTriggerEnterPrzedmioty do zebraniaSkrzynie zatrzymują resztęStrefy śmierciWejście i wyjściePodsumowanie: klucz i drzwiPoćwicz samodzielnie: Edytor online Unity