Menu
CoddyTech

Caricare con un valore predefinito

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 23 di 56.

Una chiave che non è mai stata salvata restituisce 0, e 0 non è un buon valore iniziale per alcuni valori. Un gioco di corse permette al giocatore di scegliere quanti avversari controllati dal computer partecipano a una gara, e un nuovo giocatore dovrebbe gareggiare contro 3 avversari. Ogni Get accetta un secondo argomento, il valore predefinito, che restituisce quando manca la chiave:

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

Una volta che il giocatore salva 0 avversari per esercitarsi da solo, GetInt("Rivals", 3) restituisce 0: il valore predefinito viene usato solo se manca la chiave. Ecco perché if (rivals == 0) rivals = 3; è il modo sbagliato per assegnare un valore predefinito. Non può distinguere uno 0 salvato da un valore non salvato e rimette 3 avversari in ogni gara di allenamento.

PlayerPrefs.HasKey(key) indica se una chiave è mai stata salvata, qualunque sia il suo valore, quindi permette di distinguere una prima partita da una successiva. Questo gioco dà il benvenuto a un nuovo pilota:

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 prima di qualsiasi codice che salva la chiave: dal primo salvataggio in poi, restituisce true finché la chiave non viene rimossa con PlayerPrefs.DeleteKey.

challenge icon

Sfida

Medio

La macchina arcade conserva i crediti di un giocatore con la chiave Credits: la barra spaziatrice avvia una partita al costo di un credito e i crediti rimanenti vengono salvati dopo ogni partita. I nuovi giocatori non sono ancora gestiti:

  • Un giocatore senza nulla salvato inizia con 5 crediti gratuiti. Un giocatore che ha usato tutti i crediti ha 0 salvato e inizia con 0, non con 5.
  • L’oggetto welcomeText (Benvenuto! Ecco 5 crediti gratuiti) viene mostrato solo a un giocatore che non ha Credits salvato. Tutti gli altri giocatori non lo vedono.

Premi Play e gioca una partita, poi premi Stop e di nuovo Play: il messaggio di benvenuto è scomparso. Poi premi Check.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi