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);
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
Enviar um comentário