Menu
CoddyTech

Formate números

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 3 de 60.

Um número concatenado a uma string aparece da forma como o C# o escreve: um cronômetro mostra 12.34567, e um float que vale 2 mostra 2, sem casas decimais. Uma string de formato em ToString() define como ele aparece. Cada 0 nela representa um dígito que sempre é exibido: 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 em minutos e segundos. Converta primeiro o tempo para int, o que descarta a parte fracionária; em seguida, 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}";   // Lap: 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; o arredondamento mostraria 0:60 por um instante.

challenge icon

Desafio

Fácil

Formate os três números do fliperama.

  1. Em Update(), primeiro adicione int seconds = (int)playTime;.
  2. Mostre a pontuação com seis dígitos, Score: 000450, usando {score:000000}, e o combo com uma casa decimal, Combo: x2.5, usando {combo:0.0}.
  3. Mostre o tempo assim: Time: 2:07: seconds / 60, dois-pontos e, em seguida, seconds % 60 com dois dígitos.

Pressione “Jogar” e pressione a barra de espaço: a pontuação continua com seis dígitos. Depois, “Verificar”.

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

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity