Sua primeira corrotina
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 23 de 63.
Update() precisa terminar a cada quadro, então não pode esperar. Uma corrotina pode: é um método que pausa e continua mais tarde, exatamente de onde parou. Ela retorna IEnumerator, que precisa de using System.Collections;, e cada yield return nela é uma pausa. Em C#, yield return faz um método que fornece seus valores um de cada vez; o Unity pede o próximo quando a espera termina. yield return null espera um quadro, e yield return new WaitForSeconds(3f) espera 3 segundos.
StartCoroutine(Cycle()) inicia uma. Este semáforo fica verde, amarelo 3 segundos depois e vermelho após mais um segundo:
using System.Collections;
using UnityEngine;
public class TrafficLight : MonoBehaviour
{
Renderer lamp;
void Start()
{
lamp = GetComponent<Renderer>();
StartCoroutine(Cycle());
}
IEnumerator Cycle()
{
lamp.material.color = Color.green;
yield return new WaitForSeconds(3f);
lamp.material.color = Color.yellow;
yield return new WaitForSeconds(1f);
lamp.material.color = Color.red;
}
}StartCoroutine executa a corrotina até o primeiro yield imediatamente, então Start() continua; o Unity retoma a corrotina após cada espera, com as variáveis locais como estavam. Uma chamada simples a Cycle(); sem StartCoroutine não faz nada: ela cria o método pausado e o descarta, e nenhuma linha dele é executada. E yield return 3f; não é uma espera de 3 segundos: o Unity só reconhece objetos de espera, como WaitForSeconds, e trata qualquer outro valor como um quadro.
Desafio
FácilOs Espinhos esperam sob o chão. Faça a tecla Espaço acionar a armadilha com uma corrotina chamada Spring:
- Imediatamente: registre
Click. - Meio segundo depois: os espinhos saltam 1 unidade para cima.
- 2 segundos depois: eles afundam 1 unidade novamente.
Pressione Jogar, pressione Espaço e observe; depois, Verificar.
Experimente você mesmo
using System.Collections;
using UnityEngine;
public class SpikeTrap : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Acione a armadilha com uma corrotina
}
}
// IEnumerator Spring(): Clique, espere 0.5 s, suba 1 unidade, espere 2 s, desça 1 unidade
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Física e jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para Coletar