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:23O 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.
Desafio
FácilFormate os três números do fliperama.
- Em
Update(), primeiro adicioneint seconds = (int)playTime;. - 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}. - Mostre o tempo assim:
Time: 2:07:seconds / 60, dois-pontos e, em seguida,seconds % 60com 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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no bancoPratique por conta própria: Playground de Unity