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.
Défi
FacileLe parcmètre décompte le temps payé. Écris sa méthode Update() dans ParkingMeter.cs (la scène est liée à meterText) :
timeLeftcommence à 75 secondes (définies dans l’Inspector) et diminue à chaque image, sans jamais descendre sous 0.meterTextaffiche le temps restant en minutes et en secondes, arrondi à la seconde supérieure : de 75 à 74.01, il affiche1:15, et lorsqu’il reste 0.4 seconde, il affiche0:01.- La barre d’espace permet d’insérer une pièce : 30 secondes supplémentaires, mais jamais plus que
maxTime(120, ce qui affiche2: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
}
}
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
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banque