Menu
CoddyTech

Salvar configurações

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 25 de 56.

Uma configuração é escolhida uma vez e deve ser mantida em todos os jogos seguintes, então ela pertence a PlayerPrefs. Quando o jogo começa, carregue a configuração, aplique-a ao controle para que a tela Settings a mostre e aplique-a ao jogo. Quando o jogador alterar o controle, aplique o novo valor e salve-o. Este botão de alternância (using UnityEngine.UI;) mostra ou oculta o temporizador 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 ao 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; portanto, quando o valor muda, os ouvintes também são chamados. É por isso que o ouvinte é adicionado depois do carregamento: se fosse adicionado antes, seria executado a cada início e salvaria imediatamente o valor carregado. SetIsOnWithoutNotify e SetValueWithoutNotify definem um controle sem chamar nenhum ouvinte.

O valor padrão determina o que um novo jogador recebe. GetInt("ShowTimer", 1) mostra o temporizador 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) dá 1.5 a um novo jogador.

challenge icon

Desafio

Médio

A tela Configurações tem um controle deslizante de volume de 0 a 1 e um texto que o exibe como porcentagem. Faça do volume uma configuração salva, usando a chave Volume:

  • Um novo jogador começa em 0.8, exibido como Volume: 80%.
  • O volume se aplica ao jogo inteiro por meio de AudioListener.volume, o volume principal do Unity de 0 (silencioso) a 1 (máximo), que escala todos os sons do jogo.
  • Quando o jogo começa, o volume salvo é aplicado, e o controle deslizante e o texto o exibem.
  • Quando o jogador move o controle deslizante, o novo volume é aplicado, o texto é atualizado e o volume é salvo.

ShowVolume(float volume) já escreve o texto.

Pressione Play e mova o controle deslizante, depois Stop e Play novamente, então Check.

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) + "%";
    }
}
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