Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Faça o gêiser entrar em erupção três vezes em intervalos regulares.

  1. Em Start(), chame InvokeRepeating(nameof(Erupt), 1f, 2f);.
  2. Escreva void Erupt(): some 1 a eruptions, chame ball.AddForce(Vector3.up * power, ForceMode.Impulse); e registre "Eruption " + eruptions.
  3. No final de Erupt(), quando eruptions == 3, chame CancelInvoke(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

Pratique por conta própria: Playground de Unity