Menu
CoddyTech

Un compte à rebours

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

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 l’arrête à 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 à l’entier supérieur, 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 ramènerait 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 : arrondis d’abord le temps à la seconde entière supérieure, puis formate 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

Fais décompter au parcmètre le temps payé.

  1. Dans Update(), soustrais Time.deltaTime de timeLeft, sans jamais descendre sous 0, et affiche Mathf.CeilToInt(timeLeft) en minutes et secondes : 1:15.
  2. La barre d’espace ajoute 30 secondes, jusqu’à maxTime (2:00).
  3. À 0, affiche EXPIRED en Color.red. Commence Update() par if (timeLeft == 0f) return; pour que le compteur reste ainsi.

Appuie sur « Jouer » et insère des pièces : le compteur s’arrête à 2:00. Puis appuie sur « Vérifier ».

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 secondes ; Space ajoute 30 secondes
    }
}

Toutes les leçons de Créer de vrais jeux

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