Menu
CoddyTech

Formatowanie liczb

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 3 z 56.

Liczba połączona z ciągiem znaków jest zapisywana tak, jak robi to C#: timer wyświetla 12.34567, a liczba typu float o wartości 2 jest zapisywana jako 2, bez żadnych miejsc po przecinku. O tym, jak będzie wyglądać liczba, decyduje format ciągu znaków w ToString(). Każde 0 w nim oznacza cyfrę, która zawsze zostanie zapisana: 7.ToString("000") to 007, a 41.27f.ToString("0.0") to 41.3, zaokrąglone do jednego miejsca po przecinku. W interpolacji ciągów znaków ten sam format podaje się po dwukropku: $"{coins:000}", $"{topSpeed:0.0} m/s".

Czas lepiej odczytuje się w minutach i sekundach. Najpierw rzutuj czas na int, co odrzuci część ułamkową; następnie dzielenie całkowite przez 60 daje pełne minuty, a % 60 — pozostałe sekundy. Okrążenie trwające 83.46 sekundy:

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}";   // Lap: 1:23

00 zapewnia dwie cyfry: bez niego okrążenie trwające 64 sekundy byłoby zapisane jako 1:4 zamiast 1:04. A ponieważ (int) odrzuca część ułamkową zamiast zaokrąglać, 59.7 sekundy wyświetli się jako 0:59; zaokrąglenie przez chwilę pokazywałoby 0:60.

challenge icon

Wyzwanie

Łatwy

Tablica wyników w grze zręcznościowej Scoreboard.cs wyświetla liczby bez formatowania. Naciśnięcie spacji dodaje 100 punktów pomnożonych przez mnożnik serii i zwiększa mnożnik serii o 0.5, a playTime zlicza rozegrane sekundy (w Inspectorze ustawiono początkowo wartość 47.5). Pozostaw zliczanie bez zmian i zmień sposób wyświetlania trzech tekstów:

  • scoreText: wynik w sześciu cyfrach, np. Score: 000450.
  • comboText: mnożnik serii z jednym miejscem po przecinku, np. Combo: x2.5, a na początku Combo: x1.0.
  • timeText: minuty i pełne sekundy, np. Time: 2:07. Sekundy zawsze mają dwie cyfry i nigdy nie są zaokrąglane w górę.

Naciśnij Play, zdobądź punkty kilka razy, a następnie naciśnij Check.

Spróbuj swoich sił

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;
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier