Avançar para o conteúdo principal

Unity3D Coroutines

Coroutines are functions that maintain status while returning code execution to the method that called them.

They are useful for the development of games to allow the execution of certain code over several frames.

For example to animate the camera of the game we could execute the following code:

for(int i=0;i<100;i++){
    transform.position += new Vector3(1, 0,0);
}

If this code is within a function that is executed normally it is not possible to see the camera moving along the X axis since the game scenario update only occurs at the end of the cycle and not during the execution of this.

In order to see the movement of the camera, it is necessary to perform an iteration of the cycle and then update the scene (rendering) and then continue the cycle with one more iteration and refresh the scene again, in this case what's needed is to interrupt the execution and to resume without losing the state, for this we can implement a coroutine.

A coroutine is just an IEnumerator in C #, the following function runs a cycle with 100 iterations, and at each iteration the camera moves one value along the X axis and then stops running for 0.1 seconds. Execution continues with updating the cycle variable and one more iteration.

IEnumerator animaCameraPrincipal()
    {
        for(int i = 0; i < 100; i++) {
            transform.position += new Vector3(1, 0,0);
            yield return new WaitForSecondsRealtime(0.1f);
        }
    }

This function is executed as follows:

       StartCoroutine(animaCameraPrincipal());

It is very important not to forget that as this function is executed over time it should not be called before its execution is completed. In this case the total execution of the function code lasts 10 seconds (0.1 x 100 = 10).

The coroutine can be stopped in two ways:
      - stopping all coroutines:  StopAllCoroutines();
      - stopping just the one we executed and for that we need to save a reference for the function, like so, Coroutine func=StartCoroutine(animaCameraPrincipal()); and then stopping like so, StopCoroutine(funcao);


Comentários

Mensagens populares deste blogue

Let's make a car in Unity 3D

In this post we will make a simple car in Unity 3D. The Unity 3D physics engine is used in order to give the car a real behavior. This are the steps: [1] - Create a new Project

PacMan 3D

In this post we will be making a simple and classic game, the Pacman, with Unity 3D. Let's create a new a new project

Upgrading Windows 10 Home to Pro

 So I have been thinking about upgrading my Windows 10 Home Edition to the Pro version, but I always get to the point where it seems that I had to reinstall the entire SO and quit. After some investigating I have done it this way: - following this post  on the microsoft site I use one of the default keys for Windows 10 Pro and went to Settings > Update & Security > Activation > Change the product key; - next, Windows will activate the Pro functionalities and asks to restart; - now you have the Pro version but it's not activated, so you have to buy a Windows Pro Key. I went to UR cdkeys  and bought a key for less then €20; - and with the new key went to Change the product key and activated; - and it's done. Disclaimer : I have nothing to do with UR cdkeys so you can use any site to buy you cd key and your experience may vary from mine.