Menu
CoddyTech

InvokeRepeating y CancelInvoke

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 22 de 63.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) llama a Blink por primera vez después de 0.5 segundos y, después, cada 0.5 segundos, hasta que se cancela. El primer número es el retraso antes de la primera llamada y el segundo, el tiempo entre llamadas. CancelInvoke(nameof(Blink)) lo detiene, y CancelInvoke() sin nombre detiene todas las llamadas a Invoke que el script haya programado.

Esta luz de advertencia parpadea hasta que se pulsa la barra espaciadora; después, permanece encendida:

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;
    }
}

El temporizador del capítulo sobre generación haría lo mismo con un campo float y una comprobación en Update(). Con InvokeRepeating, Unity lleva la cuenta del tiempo y realiza las llamadas. La llamada a InvokeRepeating va en Start(): en Update(), programaría una llamada repetitiva más en cada fotograma.

challenge icon

Desafío

Fácil

El Geyser lanza al aire la pelota que tiene encima. Su script tiene la ball, la power y un contador de eruptions. Haz que entre en erupción según un horario:

  • La primera erupción ocurre 1 segundo después de pulsar Reproducir; después, habrá una cada 2 segundos.
  • Una erupción es un método llamado Erupt: suma 1 a eruptions, impulsa la pelota hacia arriba con ball.AddForce(Vector3.up * power, ForceMode.Impulse) y registra Eruption 1, Eruption 2, y así sucesivamente.
  • Después de la tercera erupción, el géiser se detiene definitivamente.

Pulsa Reproducir y observa la pelota; después, pulsa Comprobar.

Pruébalo tú mismo

using UnityEngine;

public class Geyser : MonoBehaviour
{
    public Rigidbody ball;
    public float power = 6f;
    int eruptions;

    void Start()
    {
        // Entra en erupción 1 segundo después de Play y, luego, cada 2 segundos
    }

    // Erupt(): cuenta, impulsa la pelota hacia arriba y registra; detente después de la tercera erupción
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad