Menu
CoddyTech

Puntuación más alta

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 24 de 56.

La puntuación más alta es el mejor resultado de todas las partidas jugadas, así que se guarda en PlayerPrefs y solo cambia cuando una partida la supera. Esta mesa de pinball comprueba el resultado cuando se pierde la última bola:

void GameOver()
{
    int best = PlayerPrefs.GetInt("PinballBest", 0);
    if (score > best)
    {
        PlayerPrefs.SetInt("PinballBest", score);
        PlayerPrefs.Save();
        Debug.Log("New high score: " + score);
    }
}

La comparación es lo que hace que sea una puntuación más alta. Sin ella, una partida con 300 después de un récord de 5000 guardaría 300 y se perdería el récord. Compara con el mejor resultado guardado, no con algo que empieza en 0 en cada partida: un campo que no ha cargado nada vale 0 después de cada reinicio, así que cualquier puntuación lo supera. score > best conserva el récord anterior si hay un empate, mientras que score >= best consideraría que un empate es una nueva puntuación más alta.

Para mostrar la puntuación más alta durante la partida, cárgala en un campo en Start() y muestra ese campo. Cuando una partida la supere, actualiza el campo, PlayerPrefs y el texto a la vez, para que el valor mostrado en pantalla y el valor guardado nunca discrepen.

challenge icon

Desafío

Intermedio

Balloon Pump: mantén pulsada la barra espaciadora para bombear aire al globo, 20 puntos por segundo, y suéltala para cobrar los puntos. Si bombeas más allá de 100, explota y obtienes 0 puntos. El bombeo, la explosión y los puntos ya están implementados, y cuando termina la ronda se llama a EndRound() una vez, con la puntuación de la ronda en points. Añade una puntuación máxima, guardada con la clave BestPoints:

  • En Start(), carga la mejor puntuación en best (0 para un jugador nuevo), para que ShowBest() la muestre.
  • En EndRound(), cuando points supere la mejor puntuación, guárdala, muéstrala y muestra newBestText. Una ronda que no supere la mejor puntuación no cambia nada.

Pulsa Play y bombea unos cuantos globos (Stop y Play inician una nueva ronda); después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;
using TMPro;

public class BalloonPump : MonoBehaviour
{
    public TMP_Text pointsText;
    public TMP_Text bestText;
    public GameObject newBestText;
    public float pumpRate = 20f;

    private float air;
    private int points;
    private int best;
    private bool roundOver;

    void Start()
    {
        ShowBest();
    }

    void Update()
    {
        if (roundOver) return;

        if (Input.GetKey(KeyCode.Space))
        {
            air += pumpRate * Time.deltaTime;
            transform.localScale = Vector3.one * (1f + air / 50f);
            pointsText.text = "Points: " + Mathf.FloorToInt(air);
            if (air > 100f)
            {
                points = 0;
                pointsText.text = "Pop! Points: 0";
                GetComponent<Renderer>().enabled = false;
                roundOver = true;
                EndRound();
            }
        }
        else if (Input.GetKeyUp(KeyCode.Space))
        {
            points = Mathf.FloorToInt(air);
            pointsText.text = "Points: " + points;
            roundOver = true;
            EndRound();
        }
    }

    void EndRound()
    {
        // Guarda aquí un nuevo récord
    }

    void ShowBest()
    {
        bestText.text = "Best: " + best;
    }
}
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