Invocar repetidamente, Cancelar invocação
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 23 de 71.
InvokeRepeating(nameof(Blink), 0.5f, 0.5f) chama Blink pela primeira vez após 0.5 segundos e, depois, novamente a cada 0.5 segundos, até ser cancelado. O primeiro número é o atraso antes da primeira chamada; o segundo, o intervalo entre as chamadas. CancelInvoke(nameof(Blink)) interrompe essa chamada, e CancelInvoke(), sem nenhum nome, interrompe todas as chamadas Invoke que o script agendou.
Esta lâmpada de aviso pisca até que a tecla Espaço seja pressionada; então, permanece acesa:
Light lamp;
void Start()
{
lamp = GetComponent<Light>();
InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}
void Blink()
{
lamp.enabled = !lamp.enabled;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
CancelInvoke(nameof(Blink));
lamp.enabled = true;
}
}O temporizador do capítulo sobre criação de objetos faria o mesmo trabalho com um campo float e uma verificação em Update(). Com InvokeRepeating, o Unity controla o tempo e faz as chamadas. A chamada a InvokeRepeating deve ficar em Start(): em Update(), ela agendaria mais uma chamada repetida a cada quadro.
Desafio
FácilFaça o gêiser entrar em erupção três vezes em intervalos regulares.
- Em
Start(), chameInvokeRepeating(nameof(Erupt), 1f, 2f);. - Escreva
void Erupt(): some 1 aeruptions, chameball.AddForce(Vector3.up * power, ForceMode.Impulse);e registre"Eruption " + eruptions. - No final de
Erupt(), quandoeruptions == 3, chameCancelInvoke(nameof(Erupt));.
Pressione “Jogar”: a bola é lançada para cima três vezes, com 2 segundos de intervalo. Depois, clique em “Verificar”.
Experimente você mesmo
using UnityEngine;
public class Geyser : MonoBehaviour
{
public Rigidbody ball;
public float power = 6f;
int eruptions;
void Start()
{
// Entre em erupção 1 segundo após Play e, depois, a cada 2 segundos
}
// Erupt(): conte, empurre a bola para cima e registre no log; pare após a terceira erupção
}
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