Menu
CoddyTech

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.

challenge icon

Desafio

Médio

A 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 tem Credits salvo. 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;
    }
}
quiz iconTeste seus conhecimentos

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