Unidad - Corutinas

Las corrutinas son las herramientas más útiles a la hora de crear juegos en Unity. Consideremos la línea de código que se muestra a continuación para comprender de qué se tratan las corrutinas.

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

Generalmente, si llama a una función en Unity (o C #, en realidad), la función se ejecutará de principio a fin. Esto es lo que consideraría un comportamiento "normal" en lo que respecta a su código. Sin embargo, a veces queremos ralentizar deliberadamente una función o hacer que espere más de la fracción de segundo que se ejecuta. Una corrutina es capaz de hacer exactamente eso: una corrutina es una función que es capaz dewaiting y timing su proceso, además de detenerlo por completo.

Consideremos un ejemplo para entender cómo funciona una corrutina. Digamos que queremos hacer un cuadrado que cambie su color entre rojo y azul en intervalos de 1 segundo.

Para empezar, creamos un objeto. A continuación, cree un nuevo script y asígnele el nombreColorChanger. En este script, obtenemos una referencia alSprite Rendererdel sprite. Sin embargo, usaremos una forma diferente de obtener el componente. En lugar de arrastrar y soltar el componente en una ranura como lo hemos hecho hasta ahora, le pediremos al código que detecte el componente en sí.

Esto se hace a través del GetComponentmétodo, que devuelve el primer componente coincidente que detecta. Dado que solo usamos un Sprite Renderer por objeto, podemos usar este método para detectar automáticamente y obtener una referencia a nuestro renderizador cada vez.

Recuerde que el renderizador es responsable de hacer que el sprite sea realmente visible en la pantalla. El renderizador tiene uncolorpropiedad que afecta el color global del sprite; este es el valor que se va a modificar. Haciendo elColor values ​​public nos permitirá elegirlos a través del editor en el programa de selección de color predeterminado de su sistema operativo.

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);
   }
}

Ahora, atraparemos nuestra función de rutina en un ciclo while.

Para crear una corrutina en C #, simplemente creamos un método que devuelve IEnumerator. También necesita unyield returndeclaración. La declaración de rendimiento es especial; es lo que realmente le dice a Unity que pause el script y continúe en el siguiente cuadro.

Hay varias formas que se pueden utilizar para generar rentabilidad; uno de los cuales es crear una instancia delWaitForSecondsclase. Esto hace que la corrutina espere una cierta cantidad de segundos del mundo real antes de continuar.

Compilemos nuestro código y regresemos a Unity. Simplemente elegiremos nuestros colores alternos y presionaremos reproducir. Nuestro objeto ahora debería cambiar entre los dos colores en intervalos de 3 segundos. Puede convertir el intervalo en una variable pública y ajustar también la frecuencia de los cambios de color.

Las corrutinas se utilizan ampliamente para timedmétodos, como el que acabamos de hacer. La variedad deWaitForXlos métodos tienen sus propios usos. Las corrutinas también se utilizan para ejecutar procesos "secundarios" que se ejecutan por sí mismos mientras el juego se ejecuta simultáneamente. Esto es útil, por ejemplo, para cargar partes fuera de la pantalla de un nivel grande mientras el reproductor comienza en un punto.