Menu
CoddyTech

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

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

Число, соединённое со строкой, отображается так, как его записывает C#: таймер показывает 12.34567, а значение float, равное 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: 000450, с помощью {score:000000}, а комбо — с одним десятичным знаком, Combo: x2.5, с помощью {combo:0.0}.
  3. Выведи время в формате Time: 2:07: seconds / 60, двоеточие, а затем seconds % 60 двумя цифрами.

Нажми «Играть» и нажми пробел: счёт останется шестизначным. Затем нажми «Проверить».

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

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