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 60.

Uma chave que nunca foi salva retorna 0, e 0 é um valor inicial ruim para alguns casos. Em um jogo de corrida, o jogador pode escolher quantos rivais controlados pelo computador participam de uma corrida, e um novo jogador deve correr contra 3. Cada Get recebe um segundo argumento, o valor padrão, que retorna quando a chave não existe:

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 valor padrão só preenche uma chave inexistente. Por isso, if (rivals == 0) rivals = 3; é a maneira errada de definir um valor 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) verifica se uma chave já foi salva, qualquer que seja 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, ela retorna true até que a chave seja removida com PlayerPrefs.DeleteKey.

challenge icon

Desafio

Médio

Dê a um novo jogador 5 créditos grátis e uma mensagem de boas-vindas.

  1. Em Start(), carregue com um valor padrão: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. Substitua welcomeText.SetActive(false); por welcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.

Pressione “Jogar” e jogue uma partida, depois pressione Stop e “Jogar”: 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;
    }
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity