Menu
CoddyTech

Zapisz ustawienia

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 25 z 60.

Ustawienie jest wybierane raz i powinno być zachowane w każdej kolejnej grze, dlatego należy przechowywać je w PlayerPrefs. Po uruchomieniu gry wczytaj ustawienie, ustaw jego wartość w kontrolce, aby było widoczne na ekranie ustawień, i zastosuj je w grze. Gdy gracz zmieni wartość kontrolki, zastosuj nową wartość i ją zapisz. Ten przełącznik (using UnityEngine.UI;) pokazuje lub ukrywa widoczny na ekranie timer, a ponieważ PlayerPrefs nie obsługuje wartości bool, przechowuje 1 dla włączonego i 0 dla wyłączonego:

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 przekazuje nową wartość kontrolki do odbiorcy: bool dla przełącznika Toggle lub float dla suwaka Slider, którego pozycję określa slider.value. Ustawienie isOn lub value w kodzie zmienia kontrolkę tak, jak robi to gracz, więc po zmianie wartości wywoływani są również odbiorcy. Dlatego odbiornik jest dodawany po wczytaniu ustawienia: gdyby został dodany wcześniej, uruchamiałby się przy każdym starcie i zapisywał wczytaną wartość z powrotem. SetIsOnWithoutNotify i SetValueWithoutNotify ustawiają wartość kontrolki bez wywoływania odbiorników.

Wartość domyślna decyduje o tym, co otrzyma nowy gracz. GetInt("ShowTimer", 1) pokazuje timer, dopóki gracz go nie wyłączy; wartość domyślna 0 ukryłaby go przed wszystkimi, którzy nigdy nie otworzyli ustawień. Ustawienie typu float wczytuje się w ten sam sposób za pomocą PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f) ustawia wartość 1.5 dla nowego gracza. Ustawienie głośności przypisuje się do AudioListener.volume — jest to główna głośność w Unity, od 0 (cisza) do 1 (maksymalna), która skaluje wszystkie dźwięki w grze.

challenge icon

Wyzwanie

Średni

Zapisz ustawienie głośności suwaka pod kluczem Volume.

  1. W metodzie Start() wczytaj PlayerPrefs.GetFloat("Volume", 0.8f), przypisz tę wartość do slider.value i AudioListener.volume, a następnie wywołaj ShowVolume.
  2. Następnie dodaj slider.onValueChanged.AddListener(OnVolumeChanged);.
  3. W metodzie OnVolumeChanged przypisz value do AudioListener.volume, wyświetl tę wartość i zapisz ją za pomocą PlayerPrefs.SetFloat oraz PlayerPrefs.Save().

Naciśnij „Graj” i przesuń suwak, a następnie Stop i „Graj”: suwak pozostanie w ustawionym położeniu. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class VolumeSetting : MonoBehaviour
{
    public Slider slider;
    public TMP_Text volumeText;

    void Start()
    {
        // Wczytaj zapisaną głośność, zastosuj ją i wyświetl, a następnie nasłuchuj zmian suwaka
    }

    void OnVolumeChanged(float value)
    {
        // Zastosuj, wyświetl i zapisz nową głośność
    }

    void ShowVolume(float volume)
    {
        volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
    }
}

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity