Salvar um número
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 22 de 56.
Todos os campos começam com seus valores padrão quando o jogo é iniciado. Um jogador que coleta 40 gemas, sai do jogo e volta amanhã encontra a contagem de gemas em 0, porque sair encerra o jogo e tudo o que há nele. PlayerPrefs mantém valores pequenos no dispositivo do jogador entre as partidas. Cada valor é armazenado sob uma chave, uma string que você escolhe, com SetInt, SetFloat ou SetString:
PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();Para ler um valor, chame o Get do mesmo tipo com a mesma chave. Uma chave que nunca foi salva é lida como 0, 0 ou uma string vazia; assim, na primeira partida de um jogador, esta saudação mostra um nome vazio e nível 0:
void Start()
{
string player = PlayerPrefs.GetString("PlayerName");
int level = PlayerPrefs.GetInt("LevelReached");
Debug.Log(player + " is on level " + level);
}As chaves diferenciam maiúsculas de minúsculas: GetInt("levelreached") lê uma chave que nunca foi salva e retorna 0. Uma chave armazena um único tipo, então leia-a com o Get correspondente ao seu Set. Salve um valor quando ele mudar, não apenas quando o jogo terminar. O Unity grava PlayerPrefs no disco quando o jogo é encerrado normalmente, e PlayerPrefs.Save() os grava imediatamente, para que uma falha não os faça ser perdidos. Um campo static não é uma solução para isso: ele dura enquanto o jogo está em execução, e sair também encerra isso.
Desafio
MédioO JumpCounter do Hopper conta seus saltos na tela, mas a contagem é um campo simples, então todo novo jogo começa novamente em Jumps: 0. Transforme-a em um total acumulado que continue de um jogo para outro:
- Após cada salto, salve
jumpscomPlayerPrefs.SetIntusando a chaveTotalJumpse grave-o no disco comPlayerPrefs.Save(). - Em
Start(), carregue o total salvo emjumpsantes de o texto exibi-lo.
Pressione Play e salte algumas vezes; depois, pressione Stop e Play novamente: a contagem continua. Em seguida, Check.
Experimente você mesmo
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;
}
}
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