Comunidad orientada al desarrollo de videojuegos

UNITY 3D– StartCoroutine

En este post vamos a ver cómo se utiliza la función de UNITY3D StartCoroutine.

yield

yield es una palabra reservada que indica al compilador que en la función en la que aparece es un iterador. yield se utiliza con la palabra reservada return que devuelve un objeto al iterador. También se utiliza con la palabra reservada break para indicar que el iterador se ha finalizado la iteración. Para profundizar más, os recomiendo echar un vistazo a la documentación.

Vamos a ver un ejemplo para que quede un poco más claro.

   1:  static void Main()
   2:  {
   3:      foreach (int value in ComputePower(2, 30))
   4:      {
   5:          Console.Write(value);
   6:          Console.Write(" ");
   7:      }
   8:      Console.WriteLine();
   9:  }
  10:   
  11:  public static IEnumerable<int> ComputePower(int number, int exponent)
  12:  {
  13:      int exponentNum = 0;
  14:      int numberResult = 1;
  15:         
  16:      while (exponentNum < exponent)
  17:      {
  18:          numberResult *= number;
  19:          exponentNum++;
  20:     
  21:          yield return numberResult;
  22:      }
  23:  }

La función ComputePower nos devuelve todos los valores que hay de number elevado desde 1 hasta exponent, al utilizar yield, podemos llamar a esta función desde dentro de un bucle foreach.

¿Esto para qué nos sirve dentro de Unity3D?

En Unity3D nos puede ser util cuando usamos la función StartCoroutine, ya que esta función lo que hace es ejecutar un método cuyo retorno es un IEnumerator.

StartCoroutine

En primer lugar vamos a ver que es una coroutine:

Una coroutine es una función que se ejecuta parcialmente, presuponiendo que se cumplen las condiciones adecuadas, y se continuará en el futuro hasta que esta finalice.

Hay que tener en cuenta que una coroutine no se ejecuta de forma asíncrona.

Unity procesa las coroutine en cada frame del juego, después del Update y antes del LateUpdate, esto es así en la mayoría de los casos, salvo algunas circunstancias especiales. Aquí os pongo un diagrama con el ciclo de vida en Unity3D, para una explicación detallada, no dudéis en echar un ojo aquí.

Con la función StartCoroutine, lanzamos esta función. La sintaxis es StartCoroutine(“Nombre de función”);.

Cuando en una coroutine se llega a un yield, la ejecución de dicha función se detiene hasta el siguiente frame en la mayoría de los casos, aunque también es posible detener le ejecución por un lapso de tiempo si usamos la función WaitForSeconds.

Esto podría usarse para mostrar un efecto a lo largo del tiempo, o si en el juego tenemos que hacer algún tipo de validación recurrente pero que no es necesaria que se haga en cada frame.

En la propia documentación de Unity3D puedes encontrar una muy buena explicación sobre las coroutines.

, , ,

Leave a Reply