Coroutines são funções que mantém o estado enquanto devolvem a execução do código ao método que as chamou.
São úteis para o desenvolvimento de jogos para permitir a execução de determinado código ao longo de várias frames.
Por exemplo para animar a câmara do jogo podíamos executar o seguinte código:
for(int i=0;i<100;i++){
transform.position += new Vector3(1, 0,0);
}
Se este código estiver dentro de uma função que é executada normalmente não é possível ver a câmara a mover-se ao longo do eixo dos X uma vez que a atualização do cenário do jogo só ocorre no final do ciclo e não ao longo da execução deste.
Para que seja possível ver o movimento da câmara é necessário executar um iteração do ciclo e depois atualizar a cena (fazer o render) e depois continuar a execução do ciclo com mais uma iteração e volta a atualizar a cena, neste caso o que se pretende é interromper a execução e retomar sem que se perca o estado, para isso pode-se implementar uma coroutine.
Uma coroutine não é mais do que um IEnumerator em C#, a seguinte função executa um ciclo com 100 iterações e em cada iteração a câmara move-se um valor ao longo do eixo dos X e depois interrompe a execução por 0,1 segundos. A execução continua com a atualização da variável do ciclo e mais uma iteração.
IEnumerator animaCameraPrincipal()
{
for(int i = 0; i < 100; i++) {
transform.position += new Vector3(1, 0,0);
yield return new WaitForSecondsRealtime(0.1f);
}
}
Esta função é executada assim:
StartCoroutine(animaCameraPrincipal());
É muito importante não esquecer que como esta função é executada ao longo do tempo não deve ser chamada antes da sua execução estar concluída. Neste caso a execução total do código da função dura 10 segundos (0,1 x 100 = 10).
A coroutine pode ser parada de duas formas:
- parando todas as coroutines: StopAllCoroutines();
- parando só esta e para isso tempos de guardar uma referência para a coroutine, assim, Coroutine funcao=StartCoroutine(animaCameraPrincipal()); e depois parando assim, StopCoroutine(funcao);
São úteis para o desenvolvimento de jogos para permitir a execução de determinado código ao longo de várias frames.
Por exemplo para animar a câmara do jogo podíamos executar o seguinte código:
for(int i=0;i<100;i++){
transform.position += new Vector3(1, 0,0);
}
Se este código estiver dentro de uma função que é executada normalmente não é possível ver a câmara a mover-se ao longo do eixo dos X uma vez que a atualização do cenário do jogo só ocorre no final do ciclo e não ao longo da execução deste.
Para que seja possível ver o movimento da câmara é necessário executar um iteração do ciclo e depois atualizar a cena (fazer o render) e depois continuar a execução do ciclo com mais uma iteração e volta a atualizar a cena, neste caso o que se pretende é interromper a execução e retomar sem que se perca o estado, para isso pode-se implementar uma coroutine.
Uma coroutine não é mais do que um IEnumerator em C#, a seguinte função executa um ciclo com 100 iterações e em cada iteração a câmara move-se um valor ao longo do eixo dos X e depois interrompe a execução por 0,1 segundos. A execução continua com a atualização da variável do ciclo e mais uma iteração.
IEnumerator animaCameraPrincipal()
{
for(int i = 0; i < 100; i++) {
transform.position += new Vector3(1, 0,0);
yield return new WaitForSecondsRealtime(0.1f);
}
}
Esta função é executada assim:
StartCoroutine(animaCameraPrincipal());
É muito importante não esquecer que como esta função é executada ao longo do tempo não deve ser chamada antes da sua execução estar concluída. Neste caso a execução total do código da função dura 10 segundos (0,1 x 100 = 10).
A coroutine pode ser parada de duas formas:
- parando todas as coroutines: StopAllCoroutines();
- parando só esta e para isso tempos de guardar uma referência para a coroutine, assim, Coroutine funcao=StartCoroutine(animaCameraPrincipal()); e depois parando assim, StopCoroutine(funcao);
Comentários
Enviar um comentário