Menu
CoddyTech

InvokeRepeating, CancelInvoke

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 23 sur 71.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) appelle Blink une première fois après 0.5 secondes, puis à nouveau toutes les 0.5 secondes, jusqu’à son annulation. Le premier nombre correspond au délai avant le premier appel, le second au temps entre les appels. CancelInvoke(nameof(Blink)) l’arrête, et CancelInvoke() sans nom arrête tous les Invoke que le script a programmés.

Cette lampe témoin clignote jusqu’à ce que la barre d’espace soit pressée, puis reste allumée :

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

Le minuteur du chapitre sur la création d’objets ferait le même travail avec un champ float et une vérification dans Update(). Avec InvokeRepeating, Unity gère le temps et effectue les appels. L’appel à InvokeRepeating se place dans Start() : dans Update(), il programmerait un appel répétitif supplémentaire à chaque image.

challenge icon

Défi

Facile

Faites entrer le geyser en éruption trois fois selon un calendrier.

  1. Dans Start(), appelez InvokeRepeating(nameof(Erupt), 1f, 2f);.
  2. Écrivez void Erupt() : ajoutez 1 à eruptions, appelez ball.AddForce(Vector3.up * power, ForceMode.Impulse); et consignez "Eruption " + eruptions.
  3. À la fin de Erupt(), lorsque eruptions == 3, appelez CancelInvoke(nameof(Erupt));.

Appuyez sur « Jouer » : la balle est projetée vers le haut trois fois, à 2 secondes d’intervalle. Puis cliquez sur « Vérifier ».

Essayez vous-même

using UnityEngine;

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

    void Start()
    {
        // Déclencher une éruption 1 seconde après Play, puis toutes les 2 secondes
    }

    // Erupt() : compter, propulser la balle vers le haut, enregistrer dans le journal ; arrêter après la troisième éruption
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity