Carregar com um valor padrão
Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 23 de 60.
Uma chave que nunca foi salva retorna 0, e 0 é um valor inicial ruim para alguns casos. Em um jogo de corrida, o jogador pode escolher quantos rivais controlados pelo computador participam de uma corrida, e um novo jogador deve correr contra 3. Cada Get recebe um segundo argumento, o valor padrão, que retorna quando a chave não existe:
int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");Depois que o jogador salva 0 rivais para praticar sozinho, GetInt("Rivals", 3) retorna 0: o valor padrão só preenche uma chave inexistente. Por isso, if (rivals == 0) rivals = 3; é a maneira errada de definir um valor padrão. Ela não consegue distinguir um 0 salvo de nenhum valor salvo e coloca 3 rivais de volta em todas as corridas de treino.
PlayerPrefs.HasKey(key) verifica se uma chave já foi salva, qualquer que seja seu valor, então permite distinguir uma primeira partida de uma partida posterior. Este jogo dá as boas-vindas a um novo piloto:
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);
}Use HasKey antes de qualquer código que salve a chave: a partir do primeiro salvamento, ela retorna true até que a chave seja removida com PlayerPrefs.DeleteKey.
Desafio
MédioDê a um novo jogador 5 créditos grátis e uma mensagem de boas-vindas.
- Em
Start(), carregue com um valor padrão:credits = PlayerPrefs.GetInt("Credits", 5);. - Substitua
welcomeText.SetActive(false);porwelcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.
Pressione “Jogar” e jogue uma partida, depois pressione Stop e “Jogar”: a mensagem de boas-vindas desapareceu. Em seguida, pressione “Verificar”.
Experimente você mesmo
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;
}
}
Todas as lições de Criando Jogos de Verdade
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no bancoPratique por conta própria: Playground de Unity