Menu
CoddyTech

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.

challenge icon

Sfida

Medio

La 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) + "%";
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi