Formater les nombres
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 3 sur 56.
Un nombre concaténé à une chaîne s’affiche comme C# l’écrit : un chronomètre affiche 12.34567, et un float égal à 2 affiche 2, sans aucune décimale. Une chaîne de format dans ToString() détermine plutôt son apparence. Chaque 0 qu’elle contient représente un chiffre qui est toujours affiché : 7.ToString("000") donne 007, et 41.27f.ToString("0.0") donne 41.3, arrondi à une décimale. Dans l’interpolation de chaînes, le même format vient après deux-points : $"{coins:000}", $"{topSpeed:0.0} m/s".
Les temps sont plus faciles à lire en minutes et secondes. Convertis d’abord le temps en int, ce qui supprime la fraction ; ensuite, la division entière par 60 donne le nombre de minutes et % 60 le nombre de secondes restantes. Un tour de 83.46 secondes :
float lapTime = 83.46f;
int total = (int)lapTime; // 83
int minutes = total / 60; // 1
int seconds = total % 60; // 23
lapText.text = $"Lap: {minutes}:{seconds:00}"; // Tour : 1:2300 permet d’afficher deux chiffres : sans lui, un tour de 64 secondes s’afficherait sous la forme 1:4 au lieu de 1:04. Et comme (int) supprime la fraction au lieu d’arrondir, 59.7 secondes s’affichent sous la forme 0:59 ; l’arrondi afficherait momentanément 0:60.
Défi
FacileLe Scoreboard.cs de l’arcade affiche ses nombres sans formatage. La barre d’espace rapporte 100 points multipliés par le combo et augmente le combo de 0.5, et playTime compte les secondes écoulées (l’Inspector le règle à 47.5 au démarrage). Gardez le comptage tel quel et modifiez la façon dont les trois textes sont écrits :
scoreText: le score sur six chiffres, commeScore: 000450.comboText: le combo avec une décimale, commeCombo: x2.5, etCombo: x1.0au démarrage.timeText: les minutes et les secondes entières, commeTime: 2:07. Les secondes ont toujours deux chiffres et ne sont jamais arrondies à la hausse.
Appuyez sur Jouer, marquez quelques points, puis cliquez sur Vérifier.
Essayez vous-même
using UnityEngine;
using TMPro;
public class Scoreboard : MonoBehaviour
{
public TMP_Text scoreText;
public TMP_Text comboText;
public TMP_Text timeText;
public int score;
public float combo = 1f;
public float playTime;
void Update()
{
playTime += Time.deltaTime;
if (Input.GetKeyDown(KeyCode.Space))
{
score += (int)(100 * combo);
combo += 0.5f;
}
scoreText.text = "Score: " + score;
comboText.text = "Combo: x" + combo;
timeText.text = "Time: " + playTime;
}
}
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