Menu
CoddyTech

Cargar con un valor predeterminado

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

Una clave que nunca se guardó se lee como 0, y 0 no es un buen valor inicial para algunos valores. En un juego de carreras, el jugador puede elegir cuántos rivales controlados por computadora participan en una carrera, y un jugador nuevo debería competir contra 3. Cada llamada a Get recibe un segundo argumento, el valor predeterminado, que devuelve cuando falta la clave:

int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");

Una vez que el jugador guarda 0 rivales para practicar en solitario, GetInt("Rivals", 3) devuelve 0: el valor predeterminado solo se usa cuando falta una clave. Por eso, if (rivals == 0) rivals = 3; es una forma incorrecta de asignar un valor predeterminado. No puede distinguir entre un 0 guardado y la ausencia de un valor guardado, y vuelve a poner 3 rivales en cada carrera de práctica.

PlayerPrefs.HasKey(key) indica si una clave se ha guardado alguna vez, sea cual sea su valor, así que permite distinguir una primera partida de una posterior. Este juego saluda a un nuevo piloto:

void Start()
{
    if (!PlayerPrefs.HasKey("Driver"))
    {
        Debug.Log("First race! Pick a name in the garage.");
    }
    string driver = PlayerPrefs.GetString("Driver", "Rookie");
    Debug.Log("Driver: " + driver);
}

Comprueba HasKey antes de cualquier código que guarde la clave: desde el primer guardado en adelante, responde true hasta que se elimine la clave con PlayerPrefs.DeleteKey.

challenge icon

Desafío

Intermedio

La máquina arcade guarda los créditos de un jugador con la clave Credits: la barra espaciadora inicia una partida por un crédito y los créditos restantes se guardan después de cada partida. Aún no se gestiona a los nuevos jugadores:

  • Un jugador sin nada guardado empieza con 5 créditos gratis. Un jugador que ha usado todos los créditos tiene 0 guardados y empieza con 0, no con 5.
  • El objeto welcomeText (Welcome! Here are 5 free credits) solo se muestra a un jugador que no tiene Credits guardados. Ningún otro jugador lo ve.

Pulsa Play y juega una partida; después, pulsa Stop y Play de nuevo: el mensaje de bienvenida ya no aparece. Después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;
using TMPro;

public class ArcadeCredits : MonoBehaviour
{
    public TMP_Text creditsText;
    public GameObject welcomeText;
    private int credits;

    void Start()
    {
        credits = PlayerPrefs.GetInt("Credits");
        welcomeText.SetActive(false);
        ShowCredits();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
        {
            credits--;
            PlayerPrefs.SetInt("Credits", credits);
            PlayerPrefs.Save();
            ShowCredits();
        }
    }

    void ShowCredits()
    {
        creditsText.text = "Credits: " + credits;
    }
}
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