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


O áudio deste tutorial não está disponível em Português. Abaixo, você pode assistir ao vídeo com áudio em Inglês e legendas em Português, Inglês e outros idiomas. 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.

Modelos 3D, tutoriais e recursos de computação gráfica de Francesco Milanese. As licenças de uso dos modelos 3D podem ser adquiridas nas lojas externas indicadas pelos links nas respectivas páginas, conforme os termos de licença aplicáveis. Francesco Milanese — Número de IVA: 06321250877. Contato: info@francescomilanese.com


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