Salvare le impostazioni
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 25 di 56.
Un'impostazione viene scelta una volta e ci si aspetta che venga ripristinata in ogni partita successiva, quindi va salvata in PlayerPrefs. All'avvio del gioco, carica l'impostazione, assegnala al relativo controllo affinché la schermata Impostazioni la mostri e applicala al gioco. Quando il giocatore modifica il controllo, applica il nuovo valore e salvalo. Questa casella di attivazione (using UnityEngine.UI;) mostra o nasconde il timer sullo schermo e, poiché PlayerPrefs non supporta i bool, memorizza 1 per attivo e 0 per disattivo:
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 il nuovo valore del controllo al listener: un bool per un Toggle, un float per uno Slider, la cui posizione è slider.value. Impostare isOn o value dal codice modifica il controllo proprio come farebbe un giocatore, quindi quando il valore cambia vengono chiamati anche i listener. Ecco perché il listener viene aggiunto dopo il caricamento: se venisse aggiunto prima, si attiverebbe a ogni avvio e salverebbe subito di nuovo il valore caricato. SetIsOnWithoutNotify e SetValueWithoutNotify impostano un controllo senza chiamare alcun listener.
Il valore predefinito determina cosa ottiene un nuovo giocatore. GetInt("ShowTimer", 1) mostra il timer finché il giocatore non lo disattiva; un valore predefinito pari a 0 lo nasconderebbe a tutti coloro che non hanno mai aperto le impostazioni. Un'impostazione float si carica allo stesso modo con PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f) assegna 1.5 a un nuovo giocatore.
Sfida
MedioLa schermata Impostazioni ha un cursore del volume da 0 a 1 e un testo che lo mostra come percentuale. Rendi il volume un'impostazione salvata, con la chiave Volume:
- Un nuovo giocatore parte da 0.8, mostrato come Volume: 80%.
- Il volume si applica all'intero gioco tramite
AudioListener.volume, il volume principale di Unity da 0 (silenzioso) a 1 (al massimo), che scala ogni suono del gioco. - Quando il gioco si avvia, viene applicato il volume salvato e il cursore e il testo lo mostrano.
- Quando il giocatore sposta il cursore, viene applicato il nuovo volume, il testo si aggiorna e il volume viene salvato.
ShowVolume(float volume) scrive già il testo.
Premi Play e sposta il cursore, poi Stop e di nuovo Play, quindi Check.
Provalo tu
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// Carica il volume salvato, applicalo e visualizzalo, poi rileva le modifiche dello slider
}
void OnVolumeChanged(float value)
{
// Applica, visualizza e salva il nuovo volume
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input