Menu
CoddyTech

InvokeRepeating, CancelInvoke

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

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) appelle Blink pour la première fois après 0.5 seconde, puis de 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 programmés par le script.

Cette lampe témoin clignote jusqu’à ce que la touche Espace soit enfoncé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 l’apparition 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 nouvel appel répétitif à chaque image.

challenge icon

Défi

Facile

Le Geyser projette en l’air la balle posée dessus. Son script comporte ball, power et un compteur eruptions. Fais-le entrer en éruption selon un calendrier :

  • La première éruption a lieu 1 seconde après avoir appuyé sur Play, puis une éruption toutes les 2 secondes.
  • Une éruption est une méthode nommée Erupt : elle ajoute 1 à eruptions, pousse la balle vers le haut avec ball.AddForce(Vector3.up * power, ForceMode.Impulse) et journalise Eruption 1, Eruption 2, et ainsi de suite.
  • Après la troisième éruption, le geyser s’arrête définitivement.

Appuie sur Play et observe la balle, puis clique sur Check.

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 les éruptions, propulser ball vers le haut, enregistrer un message ; arrêter après la troisième
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Physique et gameplay