Menu
CoddyTech

Un compte à rebours

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 4 sur 56.

Un compte à rebours conserve le temps restant dans un float et lui soustrait Time.deltaTime à chaque image. La dernière image n’atteint que rarement exactement 0, alors Mathf.Max le bloque à cette valeur, et la fin ne doit se produire qu’une seule fois. Cette mèche donne au joueur 5 secondes pour désamorcer une bombe :

public TMP_Text fuseText;
public float fuse = 5f;
private bool exploded;

void Update()
{
    if (exploded)
    {
        return;
    }

    fuse = Mathf.Max(fuse - Time.deltaTime, 0f);
    fuseText.text = "Fuse: " + Mathf.CeilToInt(fuse);

    if (fuse == 0f)
    {
        exploded = true;
        fuseText.text = "BOOM";
        fuseText.color = Color.red;
    }
}

Mathf.CeilToInt arrondit vers le haut, ce qui convient à un compte à rebours : 5 pendant toute la première seconde (4.99 est arrondi à 5), 1 pendant la dernière, et 0 uniquement lorsque le temps est écoulé. (int)fuse tronquerait 4.99 à 4 et afficherait 0 pendant toute la dernière seconde alors que la bombe continue de faire tic-tac ; Mathf.RoundToInt afficherait 0 pendant la dernière demi-seconde. Un compte à rebours plus long, affiché en minutes et en secondes, suit la même règle : arrondir d’abord le temps à la seconde entière supérieure, puis formater ces secondes.

Le return anticipé maintient BOOM à l’écran : sans lui, l’image suivante écrirait Fuse: 0 par-dessus. Un texte a aussi une couleur, et fuseText.color = Color.red le rend rouge.

challenge icon

Défi

Facile

Le parcmètre décompte le temps payé. Écris sa méthode Update() dans ParkingMeter.cs (la scène est liée à meterText) :

  • timeLeft commence à 75 secondes (définies dans l’Inspector) et diminue à chaque image, sans jamais descendre sous 0.
  • meterText affiche le temps restant en minutes et en secondes, arrondi à la seconde supérieure : de 75 à 74.01, il affiche 1:15, et lorsqu’il reste 0.4 seconde, il affiche 0:01.
  • La barre d’espace permet d’insérer une pièce : 30 secondes supplémentaires, mais jamais plus que maxTime (120, ce qui affiche 2:00).
  • À 0, le texte indique EXPIRED, en rouge (Color.red). À partir de là, le compteur reste à 0 et les pièces ne sont plus prises en compte.

Appuie sur Play, insère quelques pièces, puis clique sur Check.

Essayez vous-même

using UnityEngine;
using TMPro;

public class ParkingMeter : MonoBehaviour
{
    public TMP_Text meterText;
    public float timeLeft = 60f;
    public float maxTime = 120f;

    void Update()
    {
        // Décrémente timeLeft et affiche-le en minutes et en secondes ; Space ajoute 30 secondes
    }
}
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 Créer de vrais jeux