Salvare un numero
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 22 di 56.
Ogni campo parte dal valore predefinito quando il gioco inizia. Un giocatore che raccoglie 40 gemme, esce e torna domani troverà 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 che scegli tu, 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. Una chiave che 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, quindi leggila con il Get che corrisponde al suo Set. Salva un valore quando cambia, non solo quando termina il gioco. Unity scrive PlayerPrefs su disco quando il gioco viene chiuso normalmente, e PlayerPrefs.Save() li scrive subito, così un arresto anomalo non può farli perdere. Un campo static non è una soluzione: dura quanto il gioco è in esecuzione, e anche questo finisce quando esci.
Sfida
MedioIl JumpCounter della Tramplina conta i suoi salti sullo schermo, ma il conteggio è un semplice campo, quindi ogni nuova partita ricomincia da Jumps: 0. Rendilo un totale cumulativo che prosegue da una partita all'altra:
- Dopo ogni salto, salva
jumpsconPlayerPrefs.SetIntusando la chiaveTotalJumpse scrivilo su disco conPlayerPrefs.Save(). - In
Start(), carica il totale salvato injumpsprima che il testo lo mostri.
Premi Play e salta alcune volte, poi premi Stop e di nuovo Play: il conteggio prosegue. Poi premi Check.
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;
}
}
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