Da formato a los números
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 3 de 60.
Un número unido a una cadena se muestra tal como lo escribe C#: un temporizador muestra 12.34567, y un número de punto flotante que vale 2 muestra 2, sin decimales. Una cadena de formato en ToString() decide cómo se ve. Cada 0 representa un dígito que siempre se escribe: 7.ToString("000") es 007, y 41.27f.ToString("0.0") es 41.3, redondeado a un decimal. En la interpolación de cadenas, el mismo formato va después de dos puntos: $"{coins:000}", $"{topSpeed:0.0} m/s".
Los tiempos se leen mejor como minutos y segundos. Primero convierte el tiempo a int, lo que elimina la parte fraccionaria; después, la división entera entre 60 da los minutos completos, y % 60 da los segundos restantes. Una vuelta 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:23El 00 mantiene dos dígitos: sin él, una vuelta de 64 segundos se mostraría como 1:4 en lugar de 1:04. Y como (int) elimina la parte fraccionaria en vez de redondear, 59.7 segundos se muestran como 0:59; si se redondeara, se mostraría 0:60 por un instante.
Desafío
FácilDa formato a los tres números del arcade.
- En
Update(), primero añadeint seconds = (int)playTime;. - Muestra la puntuación con seis dígitos,
Score: 000450, usando{score:000000}, y la combinación con un decimal,Combo: x2.5, usando{combo:0.0}. - Muestra el tiempo así:
Time: 2:07:seconds / 60, dos puntos y despuésseconds % 60con dos dígitos.
Pulsa «Jugar» y pulsa Espacio: la puntuación conserva seis dígitos. Después, pulsa «Comprobar».
Pruébalo tú mismo
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 las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: Corredor sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity