Unidade - Corrotinas

Corrotinas são as ferramentas mais úteis ao fazer jogos no Unity. Vamos considerar a linha de código mostrada abaixo para entender do que se trata as corrotinas.

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

Geralmente, se você chamar uma função no Unity (ou C #, na verdade), a função será executada do início ao fim. Isso é o que você consideraria um comportamento “normal” no que diz respeito ao seu código. No entanto, às vezes queremos desacelerar deliberadamente uma função ou fazê-la esperar por mais tempo do que a duração de uma fração de segundo. Uma co-rotina é capaz exatamente disso: uma co-rotina é uma função que é capaz dewaiting e timing seu processo, bem como pausá-lo inteiramente.

Vamos considerar um exemplo para entender como funciona uma co-rotina. Digamos que queremos fazer um quadrado que muda sua cor entre vermelho e azul em intervalos de 1 segundo.

Para começar, criamos um sprite. Em seguida, crie um novo script e nomeie-oColorChanger. Neste script, temos uma referência aoSprite Rendererdo sprite. No entanto, usaremos uma maneira diferente de obter o componente. Em vez de arrastar e soltar o componente em um slot como fizemos até agora, pediremos ao código para detectar o próprio componente.

Isso é feito por meio do GetComponentmétodo, que retorna o primeiro componente correspondente que detecta. Como usamos apenas um Sprite Renderer por objeto, podemos usar esse método para detectar automaticamente e obter uma referência para o nosso renderizador a cada vez.

Lembre-se de que o renderizador é responsável por tornar o sprite realmente visível na tela. O renderizador tem umcolorpropriedade que afeta a cor global do sprite; este é o valor que deve ser modificado. Fazendo oColor os valores públicos nos permitem selecioná-los por meio do editor do programa de seleção de cores padrão do seu sistema operacional.

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

Agora, vamos capturar nossa função de co-rotina em um loop while.

Para criar uma co-rotina em C #, simplesmente criamos um método que retorna IEnumerator. Ele também precisa de umyield returndeclaração. A declaração de retorno de rendimento é especial; é o que realmente diz ao Unity para pausar o script e continuar no próximo quadro.

Existem várias maneiras que podem ser usadas para gerar retorno; um dos quais é criar uma instância doWaitForSecondsclasse. Isso faz com que a co-rotina espere por uma certa quantidade de segundos do mundo real antes de continuar.

Vamos compilar nosso código e voltar para o Unity. Simplesmente escolheremos nossas cores alternadas e clicaremos em reproduzir. Nosso objeto agora deve alternar entre as duas cores em intervalos de 3 segundos. Você pode tornar o intervalo uma variável pública e ajustar a frequência das mudanças de cor também.

Corrotinas são amplamente utilizadas para timedmétodos, como o que acabamos de fazer. A variedade deWaitForXos métodos têm seus próprios usos. As corrotinas também são usadas para executar processos “paralelos” que são executados por conta própria enquanto o jogo é executado simultaneamente. Isso é útil, por exemplo, para carregar partes fora da tela de um nível grande enquanto o jogador começa em um ponto.