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: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; arredondando, apareceria como 0:60 por um instante.
Desafio
FácilO 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, comoScore: 000450.comboText: o combo com uma casa decimal, comoCombo: x2.5, eCombo: x1.0no início.timeText: minutos e segundos inteiros, comoTime: 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;
}
}
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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botõ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 banco