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:23Die 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.
Aufgabe
EinfachDie 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, wieScore: 000450.comboText: der Combo-Wert mit einer Dezimalstelle, wieCombo: x2.5, und zu BeginnCombo: x1.0.timeText: Minuten und ganze Sekunden, wieTime: 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;
}
}
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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank