Menu
CoddyTech

Formate números

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 3 de 56.

Um número concatenado a uma cadeia de caracteres aparece do jeito que o C# o escreve: um cronômetro mostra 12.34567, e um float que vale 2 aparece como 2, sem casas decimais. Uma string de formato em ToString() determina como ele aparece. Cada 0 nela representa um dígito que sempre é escrito: 7.ToString("000") é 007, e 41.27f.ToString("0.0") é 41.3, arredondado para uma casa decimal. Na interpolação de strings, o mesmo formato vem depois de dois-pontos: $"{coins:000}", $"{topSpeed:0.0} m/s".

Os tempos ficam mais fáceis de ler como minutos e segundos. Primeiro, converta o tempo para int, o que descarta a parte fracionária; depois, a divisão inteira por 60 fornece os minutos completos, e % 60 fornece os segundos restantes. Uma volta de 83.46 segundos:

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}";   // Volta: 1:23

O 00 mantém dois dígitos: sem ele, uma volta de 64 segundos apareceria como 1:4 em vez de 1:04. E, como (int) descarta a parte fracionária em vez de arredondar, 59.7 segundos aparece como 0:59; arredondando, apareceria como 0:60 por um instante.

challenge icon

Desafio

Fácil

O Scoreboard.cs do fliperama mostra seus números sem formatação. A barra de espaço marca 100 pontos multiplicados pelo combo e aumenta o combo em 0.5, e playTime conta os segundos jogados (o Inspector começa em 47.5). Mantenha a contagem como está e altere a forma como os três textos são escritos:

  • scoreText: a pontuação com seis dígitos, como Score: 000450.
  • comboText: o combo com uma casa decimal, como Combo: x2.5, e Combo: x1.0 no início.
  • timeText: minutos e segundos inteiros, como Time: 2:07. Os segundos sempre têm dois dígitos e nunca são arredondados para cima.

Pressione Play, marque pontos algumas vezes e depois Check.

Experimente você mesmo

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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Criando jogos de verdade