Einheit - Coroutinen
Coroutinen sind die hilfreichsten Werkzeuge beim Erstellen von Spielen in Unity. Betrachten wir die unten gezeigte Codezeile, um zu verstehen, worum es bei Coroutinen geht.
IEnumerator MyCoroutineMethod() {
// Your code here…
yield return null;
}
Wenn Sie eine Funktion in Unity (oder wirklich C #) aufrufen, wird die Funktion im Allgemeinen von Anfang bis Ende ausgeführt. Dies ist, was Sie als "normales" Verhalten in Bezug auf Ihren Code betrachten würden. Manchmal möchten wir eine Funktion jedoch absichtlich verlangsamen oder länger als die von ihr ausgeführte Sekundenbruchteil warten lassen . Eine Coroutine kann genau das: Eine Coroutine ist eine Funktion, die dazu in der Lage istwaiting und timing seinen Prozess, sowie es ganz anzuhalten.
Betrachten wir ein Beispiel, um zu verstehen, wie eine Coroutine funktioniert. Angenommen, wir möchten ein Quadrat erstellen, dessen Farbe im Abstand von 1 Sekunde zwischen Rot und Blau wechselt.
Zunächst erstellen wir ein Sprite. Erstellen Sie als Nächstes ein neues Skript und benennen Sie esColorChanger. In diesem Skript erhalten wir einen Verweis auf dieSprite Rendererdes Sprites. Wir werden jedoch eine andere Methode verwenden, um die Komponente zu erhalten. Anstatt die Komponente wie bisher in einen Steckplatz zu ziehen und dort abzulegen, werden wir den Code bitten, die Komponente selbst zu erkennen.
Dies geschieht durch die GetComponentMethode, die die erste übereinstimmende Komponente zurückgibt, die erkannt wird. Da wir nur einen Sprite-Renderer pro Objekt verwenden, können wir mit dieser Methode jedes Mal automatisch einen Verweis auf unseren Renderer erkennen und abrufen.
Denken Sie daran, dass der Renderer dafür verantwortlich ist, dass das Sprite tatsächlich auf dem Bildschirm angezeigt wird. Der Renderer hat einecolorEigenschaft, die die globale Farbe des Sprites beeinflusst; Dies ist der Wert, der geändert werden soll. Das machenColor Mit den Werten public können wir sie über den Editor im Standard-Farbauswahlprogramm Ihres Betriebssystems auswählen.
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);
}
}
Jetzt werden wir unsere Coroutine-Funktion in einer while-Schleife einfangen.
Um eine Coroutine in C # zu erstellen, erstellen wir einfach eine Methode, die zurückgibt IEnumerator. Es braucht auch eineyield returnErklärung. Die Renditeerklärung ist etwas Besonderes. Es ist das, was Unity tatsächlich anweist, das Skript anzuhalten und mit dem nächsten Frame fortzufahren.
Es gibt eine Reihe von Möglichkeiten, um eine Rendite zu erzielen. Eine davon ist das Erstellen einer Instanz vonWaitForSecondsKlasse. Dadurch wartet die Coroutine einige Sekunden in der realen Welt, bevor sie fortfährt.
Lassen Sie uns unseren Code kompilieren und zu Unity zurückkehren. Wir werden einfach unsere abwechselnden Farben auswählen und auf "Spielen" klicken. Unser Objekt sollte nun in 3-Sekunden-Intervallen zwischen den beiden Farben wechseln. Sie können das Intervall zu einer öffentlichen Variablen machen und auch die Häufigkeit der Farbänderungen anpassen.
Coroutinen werden häufig für verwendet timedMethoden, wie wir sie gerade gemacht haben. Die Vielfalt vonWaitForXMethoden haben ihre eigenen Verwendungen. Coroutinen werden auch verwendet, um "nebenbei" -Prozesse auszuführen, die von selbst ausgeführt werden, während das Spiel gleichzeitig ausgeführt wird. Dies ist beispielsweise nützlich, um Teile eines großen Levels außerhalb des Bildschirms zu laden, während der Player an einem Punkt startet.