Menu
CoddyTech

InvokeRepeating y CancelInvoke

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

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

Esta lámpara 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 la aparición de objetos 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(): si estuviera en Update(), programaría una nueva llamada repetitiva en cada fotograma.

challenge icon

Desafío

Fácil

Haz que el géiser entre en erupción tres veces según un horario.

  1. En Start(), llama a InvokeRepeating(nameof(Erupt), 1f, 2f);.
  2. Escribe void Erupt(): suma 1 a eruptions, llama a ball.AddForce(Vector3.up * power, ForceMode.Impulse); y registra "Eruption " + eruptions.
  3. Al final de Erupt(), cuando eruptions == 3, llama a CancelInvoke(nameof(Erupt));.

Pulsa «Jugar»: la pelota sale disparada hacia arriba tres veces, con 2 segundos de intervalo. 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()
    {
        // Haz erupción 1 segundo después de Play y luego cada 2 segundos
    }

    // Erupt(): cuenta las erupciones, impulsa la pelota hacia arriba y registra el evento; detente después de la tercera
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity