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.
Wyzwanie
ŚredniZapisz ustawienie głośności suwaka pod kluczem Volume.
- W metodzie
Start()wczytajPlayerPrefs.GetFloat("Volume", 0.8f), przypisz tę wartość doslider.valueiAudioListener.volume, a następnie wywołajShowVolume. - Następnie dodaj
slider.onValueChanged.AddListener(OnVolumeChanged);. - W metodzie
OnVolumeChangedprzypiszvaluedoAudioListener.volume, wyświetl tę wartość i zapisz ją za pomocąPlayerPrefs.SetFloatorazPlayerPrefs.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
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w bankuPoćwicz samodzielnie: Edytor online Unity