Menu
CoddyTech

Caricare con un valore predefinito

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

Una chiave che non è mai stata salvata viene letta come 0, e 0 è un valore iniziale poco adatto 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 prende 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 fare pratica da solo, GetInt("Rivals", 3) restituisce 0: il valore predefinito viene usato solo quando manca una chiave. Ecco perché if (rivals == 0) rivals = 3; è il modo sbagliato per impostare un valore predefinito. Non può distinguere uno 0 salvato da nessun valore salvato e reinserisce 3 avversari in ogni gara di pratica.

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

Assegna a un nuovo giocatore 5 crediti gratuiti e un messaggio di benvenuto.

  1. In Start(), carica un valore predefinito: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. Sostituisci welcomeText.SetActive(false); con welcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.

Premi «Gioca» e gioca una partita, poi premi Stop e «Gioca»: il messaggio di benvenuto è scomparso. Poi premi «Verifica».

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

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity