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.
Sfida
MedioLa 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 haCreditssalvato. 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;
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input