Menu
CoddyTech

Zahlen formatieren

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 3 von 60.

Eine Zahl, die mit einer Zeichenfolge verknüpft wird, wird so ausgegeben, wie C# sie schreibt: Ein Timer zeigt 12.34567 an, und eine Gleitkommazahl mit dem Wert 2 wird als 2 ausgegeben, ganz ohne Dezimalstellen. Eine Formatzeichenfolge in ToString() legt stattdessen fest, wie die Zahl aussieht. Jedes 0 darin steht für eine Ziffer, die immer ausgegeben wird: 7.ToString("000") ergibt 007, und 41.27f.ToString("0.0") ergibt 41.3, auf eine Dezimalstelle gerundet. Bei der Zeichenfolgeninterpolation folgt dasselbe Format nach einem Doppelpunkt: $"{coins:000}", $"{topSpeed:0.0} m/s".

Zeiten lassen sich als Minuten und Sekunden besser ablesen. Wandle die Zeit zuerst in int um, wodurch der Bruchteil verworfen wird; dann ergibt die Ganzzahldivision durch 60 die vollen Minuten und % 60 die verbleibenden Sekunden. Eine Runde von 83.46 Sekunden:

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

Das 00 sorgt für zwei Ziffern: Ohne es würde eine Runde von 64 Sekunden als 1:4 statt als 1:04 angezeigt. Und da (int) den Bruchteil verwirft, anstatt zu runden, werden 59.7 Sekunden als 0:59 angezeigt; beim Runden würde für einen Moment 0:60 angezeigt.

challenge icon

Aufgabe

Einfach

Formatiere die drei Zahlen der Spielhalle.

  1. Füge in Update() zuerst int seconds = (int)playTime; hinzu.
  2. Zeige den Punktestand mit sechs Ziffern, Score: 000450, mit {score:000000} und die Kombo mit einer Dezimalstelle, Combo: x2.5, mit {combo:0.0} an.
  3. Zeige die Zeit im Format Time: 2:07 an: seconds / 60, einen Doppelpunkt und dann seconds % 60 mit zwei Ziffern.

Drücke „Spielen“ und dann die Leertaste: Der Punktestand behält sechs Ziffern. Drücke anschließend „Prüfen“.

Probier es selbst

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

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground