Menu
CoddyTech

Salvare le impostazioni

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 25 di 60.

Un'impostazione viene scelta una volta e ci si aspetta che venga mantenuta in ogni partita successiva, quindi va salvata in PlayerPrefs. Quando la partita inizia, carica l'impostazione, impostala sul relativo controllo in modo che la schermata Impostazioni la mostri e applicala alla partita. Quando il giocatore modifica il controllo, applica il nuovo valore e salvalo. Questo interruttore (using UnityEngine.UI;) mostra o nasconde il timer sullo schermo e, poiché PlayerPrefs non ha un tipo 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, verrebbe eseguito 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 di 0 lo nasconderebbe a chiunque non avesse 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. Un'impostazione del volume va su AudioListener.volume, il volume principale di Unity da 0 (silenzioso) a 1 (volume massimo), che regola ogni suono del gioco.

challenge icon

Sfida

Medio

Salva il cursore del volume come impostazione con la chiave Volume.

  1. In Start(), carica PlayerPrefs.GetFloat("Volume", 0.8f), assegnalo a slider.value e AudioListener.volume, quindi chiama ShowVolume.
  2. Poi aggiungi slider.onValueChanged.AddListener(OnVolumeChanged);.
  3. In OnVolumeChanged, applica value a AudioListener.volume, mostralo e salvalo con PlayerPrefs.SetFloat e PlayerPrefs.Save().

Premi «Gioca» e sposta il cursore, poi Stop e «Gioca»: rimane nella posizione in cui l'hai lasciato. Poi premi «Verifica».

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

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity