Formattare i numeri
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 3 di 56.
Un numero unito a una stringa viene visualizzato nel modo in cui lo scrive C#: un timer mostra 12.34567, e un float che vale 2 mostra 2, senza decimali. Una stringa di formato in ToString() decide invece come appare. Ogni 0 al suo interno rappresenta una cifra che viene sempre scritta: 7.ToString("000") è 007 e 41.27f.ToString("0.0") è 41.3, arrotondato a una cifra decimale. Nell'interpolazione di stringhe, lo stesso formato va dopo i due punti: $"{coins:000}", $"{topSpeed:0.0} m/s".
I tempi si leggono meglio espressi in minuti e secondi. Prima converti il tempo in int, eliminando così la parte frazionaria; poi la divisione intera per 60 dà i minuti interi e % 60 i secondi rimanenti. Un giro di 83.46 secondi:
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}"; // Giro: 1:2300 mantiene due cifre: senza, un giro di 64 secondi verrebbe visualizzato come 1:4 invece di 1:04. Inoltre, poiché (int) elimina la parte frazionaria invece di arrotondare, 59.7 secondi vengono visualizzati come 0:59; con l'arrotondamento, per un momento verrebbero visualizzati come 0:60.
Sfida
FacileIl Scoreboard.cs della sala giochi mostra i numeri senza formattazione. Premendo la barra spaziatrice si ottengono 100 punti moltiplicati per la combo e la combo aumenta di 0.5, mentre playTime conta i secondi di gioco (nell'Inspector parte da 47.5). Lascia invariato il conteggio e modifica il modo in cui vengono scritti i tre testi:
scoreText: il punteggio con sei cifre, comeScore: 000450.comboText: la combo con un decimale, comeCombo: x2.5, eCombo: x1.0all'inizio.timeText: minuti e secondi interi, comeTime: 2:07. I secondi hanno sempre due cifre e non vengono mai arrotondati per eccesso.
Premi Play, totalizza punti alcune volte, poi premi Check.
Provalo tu
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;
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input