Menu
CoddyTech

Salvare un numero

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 22 di 60.

Ogni campo parte dal suo valore predefinito all'avvio del gioco. Un giocatore che raccoglie 40 gemme, esce e torna domani trova il conteggio delle gemme a 0, perché uscire termina il gioco e tutto ciò che contiene. PlayerPrefs conserva piccoli valori sul dispositivo del giocatore tra una partita e l'altra. Ogni valore viene memorizzato con una chiave, una stringa a tua scelta, usando SetInt, SetFloat o SetString:

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

Per rileggere un valore, chiama il Get dello stesso tipo con la stessa chiave. Se una chiave non è mai stata salvata, viene letta come 0, 0 o una stringa vuota, quindi alla prima partita del giocatore questo saluto mostra un nome vuoto e il livello 0:

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

Le chiavi distinguono tra maiuscole e minuscole: GetInt("levelreached") legge una chiave che non è mai stata salvata e restituisce 0. Una chiave contiene un solo tipo di dato, quindi leggila con il Get corrispondente al suo Set. Salva un valore quando cambia, non solo quando termina il gioco. Unity scrive PlayerPrefs sul disco quando il gioco termina normalmente, mentre PlayerPrefs.Save() li scrive subito, così un arresto anomalo non può farli perdere. Un campo static non è una soluzione alternativa: dura finché il gioco è in esecuzione, e anche questo termina quando esci.

challenge icon

Sfida

Medio

Fai in modo che il conteggio dei salti sia un totale permanente, salvato tra una partita e l’altra.

  1. In Update(), dopo jumps++;, aggiungi PlayerPrefs.SetInt("TotalJumps", jumps); e PlayerPrefs.Save();.
  2. In Start(), sopra ShowJumps();, caricalo: jumps = PlayerPrefs.GetInt("TotalJumps");.

Premi «Gioca» e salta, poi Stop e «Gioca» di nuovo: il conteggio continua. Poi premi «Verifica».

Provalo tu

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

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity