Menu
CoddyTech

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.

challenge icon

Desafio

Médio

Faça com que a contagem de saltos seja um total acumulado ao longo da vida, salvo entre as partidas.

  1. Em Update(), após jumps++;, adicione PlayerPrefs.SetInt("TotalJumps", jumps); e PlayerPrefs.Save();.
  2. Em Start(), acima de ShowJumps();, 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

Pratique por conta própria: Playground de Unity