Salvar um número
Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 22 de 60.
Todos os campos começam com seus valores padrão quando o jogo é iniciado. Um jogador que coleta 40 gemas, sai e volta no dia seguinte encontra a contagem de gemas em 0, porque sair encerra o jogo e tudo o que há nele. PlayerPrefs mantém pequenos valores 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 novamente, chame o Get do mesmo tipo com a mesma chave. Uma chave que nunca foi salva é lida como 0, 0 ou uma string vazia, então, na primeira partida de um jogador, esta saudação mostra um nome vazio e o 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 tipo, então leia seu valor com o Get que corresponde ao seu Set. Salve um valor quando ele mudar, não apenas quando o jogo terminar. 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 contorna isso: ele dura enquanto o jogo está em execução, e sair também encerra isso.
Desafio
MédioFaça com que a contagem de saltos seja um total acumulado ao longo da vida, salvo entre as partidas.
- Em
Update(), apósjumps++;, adicionePlayerPrefs.SetInt("TotalJumps", jumps);ePlayerPrefs.Save();. - Em
Start(), acima deShowJumps();, carregue o valor:jumps = PlayerPrefs.GetInt("TotalJumps");.
Pressione “Jogar” e pule, depois pressione Stop e “Jogar” novamente: a contagem continua. Depois, pressione “Verificar”.
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;
}
}
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