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.
Desafío
IntermedioBalloon 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 enbest(0 para un jugador nuevo), para queShowBest()la muestre. - En
EndRound(), cuandopointssupere la mejor puntuación, guárdala, muéstrala y muestranewBestText. 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;
}
}
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
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones 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 infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada