Menu
CoddyTech

Formattare i numeri

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 3 di 60.

Un numero concatenato 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 viene visualizzato. 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 sono più leggibili espressi in minuti e secondi. Converti prima 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:23

00 mantiene due cifre: senza di esso, 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; l'arrotondamento mostrerebbe per un momento 0:60.

challenge icon

Sfida

Facile

Formatta i tre numeri dell'arcade.

  1. In Update(), aggiungi per prima cosa int seconds = (int)playTime;.
  2. Mostra il punteggio con sei cifre, Score: 000450, usando {score:000000}, e la combo con un decimale, Combo: x2.5, usando {combo:0.0}.
  3. Mostra il tempo come Time: 2:07: seconds / 60, due punti, poi seconds % 60 con due cifre.

Premi «Gioca» e premi Spazio: il punteggio mantiene sei cifre. Poi premi «Verifica».

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;
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity