Menu
CoddyTech

Zahlen formatieren

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

Eine Zahl, die an eine Zeichenfolge angehängt wird, wird so ausgegeben, wie C# sie schreibt: Ein Timer zeigt 12.34567 an, und eine float-Zahl mit dem Wert 2 wird als 2 ausgegeben, ganz ohne Nachkommastellen. Eine Formatzeichenfolge in ToString() legt stattdessen fest, wie die Ausgabe aussieht. Jede 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 Nachkommastelle gerundet. Bei der Zeichenfolgeninterpolation steht 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 Nachkommaanteil entfällt; dann ergibt die ganzzahlige Division 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}";   // Runde: 1:23

Die 00 sorgt dafür, dass zwei Ziffern angezeigt werden: Ohne sie würde eine Runde von 64 Sekunden als 1:4 statt als 1:04 angezeigt. Und da (int) den Nachkommaanteil abschneidet, statt 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

Die Scoreboard.cs der Spielhalle zeigt die Zahlen unverarbeitet an. Mit der Leertaste erhältst du 100 Punkte multipliziert mit dem Combo-Wert, und der Combo-Wert steigt um 0.5. playTime zählt die gespielten Sekunden (im Inspector startet der Wert bei 47.5). Lass die Zählung unverändert und ändere, wie die drei Texte geschrieben werden:

  • scoreText: der Punktestand mit sechs Ziffern, wie Score: 000450.
  • comboText: der Combo-Wert mit einer Dezimalstelle, wie Combo: x2.5, und zu Beginn Combo: x1.0.
  • timeText: Minuten und ganze Sekunden, wie Time: 2:07. Die Sekunden haben immer zwei Ziffern und werden niemals aufgerundet.

Drücke auf Play, erziele ein paar Mal Punkte und klicke dann auf Check.

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;
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Echte Spiele entwickeln