Menu
CoddyTech

Форматирование чисел

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 3 из 56.

Число, соединённое со строкой, отображается так, как это делает 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

Задание

Легко

Табло аркады Scoreboard.cs показывает числа без форматирования. Пробел добавляет 100 очков, умноженных на комбо, и увеличивает комбо на 0.5, а playTime отсчитывает прошедшие секунды (в Inspector начальное значение — 47.5). Не меняй подсчёт, а измени форматирование трёх текстовых полей:

  • scoreText: счёт в виде шестизначного числа, например Score: 000450.
  • comboText: комбо с одним десятичным знаком, например Combo: x2.5, а в начале — Combo: x1.0.
  • timeText: минуты и целые секунды, например Time: 2:07. Секунды всегда отображаются двумя цифрами и никогда не округляются вверх.

Нажми Play, набери очки несколько раз, затем нажми Check.

Попробуйте сами

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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Создание настоящих игр