Jedność - Coroutines

Coroutines to najbardziej pomocne narzędzia podczas tworzenia gier w Unity. Rozważmy poniższy wiersz kodu, aby zrozumieć, o co chodzi w programach.

IEnumerator MyCoroutineMethod() {
   // Your code here…
   
   yield return null;
}

Ogólnie rzecz biorąc, jeśli wywołasz funkcję w Unity (lub tak naprawdę C #), funkcja będzie działać od początku do końca. To właśnie można uznać za „normalne” zachowanie, jeśli chodzi o kod. Czasami jednak chcemy celowo spowolnić funkcję lub sprawić, by czekała dłużej niż trwa ułamek sekundy, który działa. Korutyn jest właśnie do tego zdolny: program jest funkcją, do której jest zdolnywaiting i timing proces, a także jego całkowite wstrzymanie.

Rozważmy przykład, aby zrozumieć, jak działa program. Powiedzmy, że chcemy utworzyć kwadrat, który zmienia kolor z czerwonego na niebieski w 1-sekundowych odstępach.

Na początek tworzymy duszka. Następnie utwórz nowy skrypt i nazwij goColorChanger. W tym skrypcie otrzymujemy odniesienie do plikuSprite Rendererduszka. Jednak użyjemy innego sposobu zdobycia komponentu. Zamiast przeciągać i upuszczać komponent w slocie, jak to robiliśmy do tej pory, poprosimy kod o wykrycie samego komponentu.

Odbywa się to za pośrednictwem GetComponent, która zwraca pierwszy wykryty pasujący składnik. Ponieważ używamy tylko jednego Sprite Renderer na obiekt, możemy użyć tej metody, aby za każdym razem automatycznie wykrywać i pobierać odniesienie do naszego renderera.

Pamiętaj, że renderer jest odpowiedzialny za faktyczną widoczność sprite'a na ekranie. Mechanizm renderujący ma rozszerzeniecolorwłaściwość wpływająca na globalny kolor duszka; to jest wartość, która ma zostać zmodyfikowana. TworzenieColor wartości public pozwoli nam wybrać je za pomocą edytora w domyślnym programie do wybierania kolorów systemu operacyjnego.

private SpriteRenderer sr;

public Color color1;
public Color color2;

void Start () {
   sr = GetComponent<SpriteRenderer>();
   StartCoroutine(ChangeColor());
}

IEnumerator ChangeColor() {
   
   while (true) {
      
      if (sr.color == color1)
         sr.color = color2;
      
      else
         sr.color = color1;
      
      yield return new WaitForSeconds(3);
   }
}

Teraz uwięzimy naszą funkcję coroutine w pętli while.

Aby utworzyć coroutine w C #, po prostu tworzymy metodę, która zwraca IEnumerator. Potrzebuje równieżyield returnkomunikat. Instrukcja yield return jest wyjątkowa; to właśnie mówi Unity, aby wstrzymał skrypt i kontynuował w następnej klatce.

Istnieje wiele sposobów, dzięki którym można uzyskać zwrot; jednym z nich jest utworzenie instancjiWaitForSecondsklasa. To sprawia, że ​​program czeka przez określoną liczbę rzeczywistych sekund, zanim przejdzie dalej.

Skompilujmy nasz kod i wróćmy do Unity. Po prostu wybierzemy naprzemienne kolory i uruchomimy grę. Nasz obiekt powinien teraz przełączać się między dwoma kolorami w odstępach 3-sekundowych. Możesz ustawić interwał jako zmienną publiczną i dostosować również częstotliwość zmian kolorów.

Coroutines są szeroko używane do timedmetody, takie jak ta, którą właśnie zrobiliśmy. RóżnorodnośćWaitForXmetody mają swoje własne zastosowania. Coroutines są również używane do uruchamiania procesów „po stronie”, które działają samodzielnie, podczas gdy gra działa jednocześnie. Jest to przydatne, na przykład, do wczytywania pozaekranowych części dużego poziomu, gdy gracz zaczyna w pewnym momencie.