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

Una clave que nunca se ha guardado 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 la computadora participan en una carrera, y un jugador nuevo debería competir contra 3. Cada 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 a solas, GetInt("Rivals", 3) devuelve 0: el valor predeterminado solo se usa cuando falta una clave. Por eso, if (rivals == 0) rivals = 3; no es la forma correcta de asignar un valor predeterminado. No puede distinguir entre un 0 guardado y ningún valor guardado, y vuelve a poner 3 rivales en todas las carreras de práctica.

PlayerPrefs.HasKey(key) indica si una clave se ha guardado alguna vez, sea cual sea su valor, así que permite distinguir la primera partida de las posteriores. Este juego da la bienvenida 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);
}

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

challenge icon

Desafío

Intermedio

Da a cada jugador nuevo 5 créditos gratis y un mensaje de bienvenida.

  1. En Start(), carga un valor predeterminado: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. Reemplaza welcomeText.SetActive(false); por welcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.

Presiona «Jugar» y juega una partida; después, presiona Detener y «Jugar»: el mensaje de bienvenida habrá desaparecido. Después, presiona «Comprobar».

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

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity