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

La puntuación máxima 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áxima. Sin ella, una partida con 300 puntos después de haber logrado una puntuación máxima de 5000 guardaría 300 y se perdería el récord. Compara con la mejor puntuación guardada, no con un valor que empieza en 0 en cada partida: un campo que no carga ningún valor es 0 después de cada reinicio, así que cualquier puntuación lo supera. score > best conserva el récord anterior en caso de empate, mientras que score >= best consideraría un empate como una nueva puntuación máxima.

Para mostrar la puntuación máxima 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 la pantalla y el valor guardado nunca discrepen.

challenge icon

Desafío

Intermedio

Guarda una puntuación alta con la clave BestPoints.

  1. En Start(), encima de ShowBest();, escribe best = PlayerPrefs.GetInt("BestPoints", 0);.
  2. En EndRound(), dentro de if (points > best): establece best = points;, guárdalo con PlayerPrefs.SetInt y PlayerPrefs.Save(), después llama a ShowBest(); y newBestText.SetActive(true);.

Pulsa «Jugar» e infla un globo (mantén pulsada la barra espaciadora y suéltala); después, pulsa «Detener» y «Jugar»: se conserva la puntuación más alta. Después, pulsa «Comprobar».

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;
    }
}

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity