Menu
CoddyTech

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:23

00 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.

challenge icon

Wyzwanie

Łatwy

Sformatuj trzy liczby w grze zręcznościowej.

  1. W Update() najpierw dodaj int seconds = (int)playTime;.
  2. 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}.
  3. Wyświetl czas w formacie Time: 2:07: seconds / 60, dwukropek, a następnie seconds % 60 w 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

Poćwicz samodzielnie: Edytor online Unity