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.
Sfida
MedioFai in modo che il conteggio dei salti sia un totale permanente, salvato tra una partita e l’altra.
- In
Update(), dopojumps++;, aggiungiPlayerPrefs.SetInt("TotalJumps", jumps);ePlayerPrefs.Save();. - In
Start(), sopraShowJumps();, 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
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro2Pulsanti 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: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity