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:23Das 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.
Aufgabe
EinfachFormatiere die drei Zahlen der Spielhalle.
- Füge in
Update()zuerstint seconds = (int)playTime;hinzu. - 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. - Zeige die Zeit im Format
Time: 2:07an:seconds / 60, einen Doppelpunkt und dannseconds % 60mit 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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons 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Übe selbstständig: Unity-Playground