Formatowanie liczb
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 3 z 60.
Liczba połączona z ciągiem znaków wyświetla się tak, jak zapisuje ją C#: timer pokazuje 12.34567, a liczba float o wartości 2 — 2, bez żadnych miejsc po przecinku. O tym, jak liczba wygląda, decyduje format ciągu znaków w ToString(). Każde 0 w nim oznacza cyfrę, która jest zawsze zapisywana: 7.ToString("000") daje 007, a 41.27f.ToString("0.0") daje 41.3, zaokrąglone do jednego miejsca po przecinku. W interpolacji ciągów ten sam format umieszcza się po dwukropku: $"{coins:000}", $"{topSpeed:0.0} m/s".
Czasy łatwiej odczytać, gdy są zapisane w minutach i sekundach. Najpierw rzutuj czas na int, co odrzuca 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 wyświetlanie dwóch cyfr: bez tego okrążenie trwające 64 sekundy byłoby wyświetlane jako 1:4 zamiast 1:04. A ponieważ (int) odrzuca część ułamkową zamiast zaokrąglać, 59.7 sekundy wyświetla się jako 0:59; zaokrąglenie spowodowałoby, że przez chwilę byłoby widać 0:60.
Wyzwanie
ŁatwySformatuj trzy liczby w grze zręcznościowej.
- W
Update()najpierw dodajint seconds = (int)playTime;. - Wyświetl wynik w sześciu cyfrach,
Score: 000450, za pomocą{score:000000}, a mnożnik serii z jednym miejscem po przecinku,Combo: x2.5, za pomocą{combo:0.0}. - Wyświetl czas w formacie
Time: 2:07:seconds / 60, dwukropek, a następnieseconds % 60w dwóch cyfrach.
Naciśnij „Graj” i naciśnij spację: wynik nadal będzie wyświetlany w sześciu cyfrach. Następnie naciśnij „Sprawdź”.
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;
}
}
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski 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 bankuPoćwicz samodzielnie: Edytor online Unity