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:2300 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.
Wyzwanie
ŁatwyTablica 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ątkuCombo: 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;
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku