Sua primeira corrotina
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 24 de 71.
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 cria um método que fornece seus valores um de cada vez; o Unity solicita 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é seu primeiro yield imediatamente, e então Start() continua; o Unity retoma a execução após cada espera, com as variáveis locais como estavam. Um Cycle(); isolado, sem StartCoroutine, não faz nada: ele 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ácilFaça a armadilha de espinhos saltar com a tecla Espaço usando uma coroutine.
- Escreva
IEnumerator Spring(): registreClick,yield return new WaitForSeconds(0.5f);e, em seguida,transform.position += Vector3.up;. - Depois, espere 2 segundos da mesma forma e subtraia
Vector3.upnovamente. - No
ifda tecla Espaço, inicie-a comStartCoroutine(Spring());.
Pressione “Jogar” e a tecla Espaço: os espinhos saltam para cima e depois descem. Em seguida, clique em “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
}
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 regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisõ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 ColetarPratique por conta própria: Playground de Unity