Menu
CoddyTech

Salvar configurações

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 25 de 60.

Uma configuração é escolhida uma vez e deve ser mantida em todos os jogos seguintes, então ela deve ficar em PlayerPrefs. Quando o jogo começa, carregue a configuração, aplique-a ao controle para que a tela de configurações a mostre e aplique-a ao jogo. Quando o jogador alterar o controle, aplique o novo valor e salve-o. Este alternador (using UnityEngine.UI;) mostra ou oculta o cronômetro na tela e, como PlayerPrefs não tem bool, armazena 1 para ligado e 0 para desligado:

public Toggle timerToggle;
public GameObject timerText;

void Start()
{
    bool show = PlayerPrefs.GetInt("ShowTimer", 1) == 1;
    timerToggle.isOn = show;
    timerText.SetActive(show);
    timerToggle.onValueChanged.AddListener(OnTimerToggled);
}

void OnTimerToggled(bool on)
{
    timerText.SetActive(on);
    PlayerPrefs.SetInt("ShowTimer", on ? 1 : 0);
    PlayerPrefs.Save();
}

onValueChanged passa o novo valor do controle para o ouvinte: um bool para um Toggle, um float para um Slider, cuja posição é slider.value. Definir isOn ou value por código altera o controle da mesma forma que um jogador faria, então, quando o valor muda, isso também chama os ouvintes. Por isso o ouvinte é adicionado depois do carregamento: se fosse adicionado primeiro, seria executado a cada inicialização e salvaria imediatamente o valor carregado. SetIsOnWithoutNotify e SetValueWithoutNotify definem o controle sem chamar nenhum ouvinte.

O valor padrão determina o que um novo jogador recebe. GetInt("ShowTimer", 1) mostra o cronômetro até que o jogador o desligue; um valor padrão de 0 o ocultaria para todos que nunca abriram as configurações. Uma configuração float é carregada da mesma forma com PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f) fornece 1.5 a um novo jogador. Uma configuração de volume é aplicada a AudioListener.volume, o volume mestre do Unity, de 0 (silencioso) a 1 (máximo), que ajusta o volume de todos os sons do jogo.

challenge icon

Desafio

Médio

Configure o controle deslizante de volume como uma configuração salva com a chave Volume.

  1. Em Start(), carregue PlayerPrefs.GetFloat("Volume", 0.8f), atribua o valor a slider.value e AudioListener.volume e chame ShowVolume.
  2. Em seguida, adicione slider.onValueChanged.AddListener(OnVolumeChanged);.
  3. Em OnVolumeChanged, aplique value a AudioListener.volume, exiba o valor e salve-o com PlayerPrefs.SetFloat e PlayerPrefs.Save().

Pressione “Jogar” e mova o controle deslizante; em seguida, pressione Stop e “Jogar”: ele permanece na posição em que você o deixou. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class VolumeSetting : MonoBehaviour
{
    public Slider slider;
    public TMP_Text volumeText;

    void Start()
    {
        // Carregue o volume salvo, aplique-o e exiba-o; depois, monitore o slider
    }

    void OnVolumeChanged(float value)
    {
        // Aplique, exiba e salve o novo volume
    }

    void ShowVolume(float volume)
    {
        volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
    }
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity