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.
Desafío
FácilEl 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 aeruptions, impulsa la pelota hacia arriba conball.AddForce(Vector3.up * power, ForceMode.Impulse)y registraEruption 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
}
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
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de monedas
La bola rodanteMonedas para recoger