Menu
CoddyTech

格式化数字

本课属于 Coddy Unity 学习旅程的“打造真正的游戏”单元。第 3 课,共 60 课。

数字与字符串拼接时,会按 C# 的写法显示:计时器显示 12.34567,值为 2 的浮点数显示 2,完全不带小数。ToString() 中的格式字符串可以控制显示效果。其中的每个 0 都表示一个始终会显示的数字:7.ToString("000") 得到 007,而 41.27f.ToString("0.0") 得到 41.3,四舍五入到一位小数。在字符串插值中,同样的格式写在冒号后面:$"{coins:000}"、$"{topSpeed:0.0} m/s"。

将时间显示为分和秒更易读。先将时间强制转换为 int,这样会舍去小数部分;然后用整数除法除以 60,得到整分钟数,再用 % 60 得到剩余秒数。一圈用时 83.46 秒:

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 会保留两位数字:没有它的话,用时 64 秒的一圈会显示为 1:4,而不是 1:04。而且,由于 (int) 会舍去小数部分,而不是进行四舍五入,所以 59.7 秒会显示为 0:59;如果进行四舍五入,就会有一瞬间显示为 0:60。

challenge icon

挑战

简单

设置街机中的三个数字的格式。

  1. 在 Update() 中,先添加 int seconds = (int)playTime;。
  2. 用 {score:000000} 将分数显示为六位数,例如 Score: 000450;用 {combo:0.0} 将连击数显示为一位小数,例如 Combo: x2.5。
  3. 将时间显示为 Time: 2:07:使用 seconds / 60,接着加上冒号,然后将 seconds % 60 显示为两位数。

按“开始”,再按 Space:分数会始终显示为六位数。然后点击“检查”。

亲手试试

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

打造真正的游戏中的所有课

自己练习: Unity 在线编辑器