Menu
CoddyTech

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 56.

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() determina cómo se ve. Cada 0 en ella 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 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}";   // Vuelta: 1:23

El 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 muestra como 0:59; si se redondeara, mostraría 0:60 por un instante.

challenge icon

Desafío

Fácil

El Scoreboard.cs de la sala de juegos muestra sus números sin formato. Al pulsar la barra espaciadora, se suman 100 puntos multiplicados por el combo y el combo aumenta en 0.5; playTime cuenta los segundos jugados (el Inspector lo inicia en 47.5). Mantén el conteo tal como está y cambia cómo se escriben los tres textos:

  • scoreText: la puntuación con seis dígitos, como Score: 000450.
  • comboText: el combo con un decimal, como Combo: x2.5, y Combo: x1.0 al inicio.
  • timeText: minutos y segundos enteros, como Time: 2:07. Los segundos siempre tienen dos dígitos y nunca se redondean hacia arriba.

Pulsa Play, consigue puntos varias veces y después pulsa Check.

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;
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales