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.
Desafio
MédioA 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) + "%";
}
}
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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botõ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 banco