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.
Desafio
MédioConfigure o controle deslizante de volume como uma configuração salva com a chave Volume.
- Em
Start(), carreguePlayerPrefs.GetFloat("Volume", 0.8f), atribua o valor aslider.valueeAudioListener.volumee chameShowVolume. - Em seguida, adicione
slider.onValueChanged.AddListener(OnVolumeChanged);. - Em
OnVolumeChanged, apliquevalueaAudioListener.volume, exiba o valor e salve-o comPlayerPrefs.SetFloatePlayerPrefs.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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no bancoPratique por conta própria: Playground de Unity