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.
Défi
FacileFais décompter au parcmètre le temps payé.
- Dans
Update(), soustraisTime.deltaTimedetimeLeft, sans jamais descendre sous 0, et afficheMathf.CeilToInt(timeLeft)en minutes et secondes :1:15. - La barre d’espace ajoute 30 secondes, jusqu’à
maxTime(2:00). - À 0, affiche
EXPIREDenColor.red. CommenceUpdate()parif (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
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 niveau2Boutons 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 banqueEntraînez-vous par vous-même : Playground Unity