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.
Desafío
FácilHaz que el géiser entre en erupción tres veces según un horario.
- En
Start(), llama aInvokeRepeating(nameof(Erupt), 1f, 2f);. - Escribe
void Erupt(): suma 1 aeruptions, llama aball.AddForce(Vector3.up * power, ForceMode.Impulse);y registra"Eruption " + eruptions. - Al final de
Erupt(), cuandoeruptions == 3, llama aCancelInvoke(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
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 regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity