Coroutines são funções que podem ser executadas de forma concorrente com o ciclo principal de execução do jogo...


A versão em vídeo deste tutorial não está disponível no momento neste idioma. Abaixo, você pode assistir à versão em inglês com legendas; abaixo do vídeo, você encontrará a transcrição traduzida para o português.


Transcrição do vídeo

Olá a todos!

Bem-vindos a este tutorial básico sobre o uso de Coroutines no Unity.

Coroutines são funções que podem ser executadas de forma concorrente com o ciclo principal de execução do jogo.

Neste tutorial, vou usar um exemplo prático para explicar o conceito e também apresentar a função WaitForSeconds, que permite aguardar a execução de uma operação por um número específico de segundos.

Este tutorial pressupõe que você tenha um conhecimento básico de programação em C# no Unity. Ele foi gravado usando a versão 2022 do Unity, mas Coroutines estão disponíveis em muitas linguagens de programação e em versões anteriores do Unity.

Nosso objetivo é fazer com que o canhão dispare automaticamente um Prefab de bala de canhão, que é uma esfera preta simples, a cada 3 segundos, até que ocorra um evento externo que interrompa essa rotina.

Neste caso, o evento externo será o usuário pressionando a tecla S, de "Stop".

Para começar, precisamos criar um script para o canhão e chamá-lo de "autoshoot".

Dentro da classe principal, defino três variáveis para especificar o ponto inicial da bala em relação ao canhão:

public GameObject spawnPrefab;

Vou vincular o prefab da bala de canhão no Unity Editor a esta variável pública.

Vector3 spawnPosition;

Quaternion spawnRotation;

Calculei esse ponto e a orientação inicial, então inicializo esses dois valores dentro da função Start:

spawnPosition = transform.position + new Vector3(-1.2f, 1.8f, 0f);

spawnRotation = Quaternion.Euler(-10f, -90f, 0f);

É claro que precisamos implementar um loop que se repita indefinidamente, a menos que um evento externo o interrompa, e que inclua uma instrução de espera de 3 segundos antes de passar para a próxima iteração.

OBSERVAÇÃO: o prefab da bala de canhão vem com um script que, ao iniciar, aplica um impulso inicial para frente na bala e define o objeto para se autodestruir após 3 segundos, para não encher nem o universo virtual nem a memória do sistema com balas de canhão.

A instrução WaitForSeconds nos permite pausar por uma quantidade específica de tempo, que no nosso caso é de 3 segundos.

Agora precisamos criar um bloco WHILE para executar o loop principal, que estou escrevendo neste momento em um espaço vazio do script.

while(true) {

GameObject cannonBall = Instantiate(spawnPrefab, spawnPosition, spawnRotation, null);

yield return new WaitForSeconds(3);

}

Então, onde devemos colocar esse bloco WHILE?

Ele não pode ser colocado em Start, pois não podemos usar yield WaitForSeconds ali. Além disso, colocá-lo em Update não geraria atraso, já que Update é chamado a cada frame do jogo.

Portanto, devemos criar uma função chamada "shoot" que retorne o tipo IEnumerator e inclua o bloco WHILE.

Essa função permitirá iniciar uma Coroutine usando a instrução StartCoroutine com o nome da função como parâmetro entre aspas duplas.

Como o canhão precisa começar a atirar imediatamente, escrevemos:

StartCoroutine("shoot");

dentro de Start, imediatamente após inicializar spawnPosition e spawnRotation.

Vamos salvar o script e ir para o editor testar o script definido até este ponto.

Para poder parar ou reiniciar a Coroutine, vamos voltar ao script e adicionar duas instruções.

Podemos parar a Coroutine verificando se a tecla S foi pressionada e então chamando a função StopCoroutine com a Coroutine "shoot" como parâmetro.

Da mesma forma, podemos reiniciar a Coroutine verificando se a tecla R foi pressionada e chamando a função StartCoroutine com "shoot" como parâmetro.

Então, vamos escrever, dentro de Update:

if(Input.GetKeyDown(KeyCode.S)) StopCoroutine("shoot");

if(Input.GetKeyDown(KeyCode.R)) StartCoroutine("shoot");

Depois de adicionar essas instruções, vamos salvar o script e voltar ao Unity Editor para testá-lo.

Isso é tudo para este breve tutorial. Espero que tenha sido útil para você! Até breve!

Pesquisar nos Tutoriais

Digite uma frase ou várias palavras-chave separadas por vírgulas para pesquisar.

Este é um site pessoal e não constitui um canal de vendas. As páginas dedicadas aos modelos 3D documentam uma seleção dos meus trabalhos e não contêm ofertas, preços, formas de compra nem links comerciais. No momento, não aceito solicitações de trabalhos personalizados, consultorias ou outras colaborações profissionais.


INFORMAÇÕES DE POLÍTICA DE PRIVACIDADE AVANÇADAS E USO DOS FICHEIROS DE COOKIES