Menu
CoddyTech

Guardar un número

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 22 de 60.

Todos los campos empiezan con su valor predeterminado cuando se inicia el juego. Un jugador que recoge 40 gemas, sale y vuelve mañana encuentra el contador de gemas en 0, porque salir termina el juego y todo lo que contiene. PlayerPrefs conserva valores pequeños en el dispositivo del jugador entre partidas. Cada valor se guarda con una clave, una cadena que eliges, mediante SetInt, SetFloat o SetString:

PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();

Para volver a leer un valor, llama al Get del mismo tipo con la misma clave. Si nunca se guardó una clave, al leerla se obtiene 0, 0 o una cadena vacía; por eso, en la primera partida de un jugador, este saludo muestra un nombre vacío y el nivel 0:

void Start()
{
    string player = PlayerPrefs.GetString("PlayerName");
    int level = PlayerPrefs.GetInt("LevelReached");
    Debug.Log(player + " is on level " + level);
}

Las claves distinguen entre mayúsculas y minúsculas: GetInt("levelreached") lee una clave que nunca se guardó y devuelve 0. Una clave almacena un solo tipo, así que léela con el Get que corresponda a su Set. Guarda un valor cuando cambie, no solo cuando termine el juego. Unity escribe PlayerPrefs en el disco cuando el juego se cierra normalmente, y PlayerPrefs.Save() los escribe de inmediato, así que un fallo no puede hacer que se pierdan. Un campo static no sirve para evitar esto: dura mientras el juego está en ejecución, y salir también lo termina.

challenge icon

Desafío

Intermedio

Haz que el recuento de saltos sea un total de por vida, guardado entre partidas.

  1. En Update(), después de jumps++;, añade PlayerPrefs.SetInt("TotalJumps", jumps); y PlayerPrefs.Save();.
  2. En Start(), encima de ShowJumps();, cárgalo: jumps = PlayerPrefs.GetInt("TotalJumps");.

Pulsa «Jugar» y salta; después, pulsa «Detener» y «Jugar» otra vez: el recuento continúa. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;
using TMPro;

public class JumpCounter : MonoBehaviour
{
    public TMP_Text jumpsText;
    public float hop = 5f;
    private Rigidbody rb;
    private int jumps;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        ShowJumps();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.linearVelocity = Vector3.up * hop;
            jumps++;
            ShowJumps();
        }
    }

    void ShowJumps()
    {
        jumpsText.text = "Jumps: " + jumps;
    }
}

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity