Carregar com um valor padrão
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 23 de 56.
Uma chave que nunca foi salva é lida como 0, e 0 não é um bom valor inicial para alguns valores. Um jogo de corrida permite que o jogador escolha quantos rivais controlados pelo computador participam da corrida, e um novo jogador deve correr contra 3. Cada Get recebe um segundo argumento, o padrão, que retorna quando a chave está ausente:
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 padrão só preenche uma chave ausente. Por isso, if (rivals == 0) rivals = 3; é a maneira errada de definir um 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) informa se uma chave já foi salva, qualquer que seja o 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, ele retorna true até que a chave seja removida com PlayerPrefs.DeleteKey.
Desafio
MédioA máquina de fliperama mantém os créditos de um jogador sob a chave Credits: a tecla Espaço inicia uma partida por um crédito, e os créditos restantes são salvos após cada partida. Os novos jogadores ainda não são tratados:
- Um jogador sem nada salvo começa com 5 créditos grátis. Um jogador que já usou todos os créditos tem 0 salvo e começa com 0, não 5.
- O objeto
welcomeText(Boas-vindas! Aqui estão 5 créditos grátis) é exibido apenas para um jogador que não temCreditssalvo. Todos os outros jogadores não o veem.
Pressione Jogar e jogue uma partida; depois pressione Parar e Jogar novamente: 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;
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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ímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botõ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 banco