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

challenge icon

Desafío

Fácil

Da formato a los tres números del arcade.

  1. En Update(), primero añade int seconds = (int)playTime;.
  2. 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}.
  3. Muestra el tiempo así: Time: 2:07: seconds / 60, dos puntos y después seconds % 60 con 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

Practica por tu cuenta: Playground de Unity