Zapisz ustawienia
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 25 z 56.
Ustawienie wybiera się raz i oczekuje, że będzie dostępne przy każdej kolejnej grze, dlatego należy je zapisać w PlayerPrefs. Po uruchomieniu gry wczytaj ustawienie, ustaw je w kontrolce, aby ekran Settings pokazywał jego wartość, i zastosuj je w grze. Gdy gracz zmieni wartość kontrolki, zastosuj nową wartość i zapisz ją. Ten przełącznik (using UnityEngine.UI;) pokazuje lub ukrywa widoczny na ekranie timer, a ponieważ PlayerPrefs nie obsługuje wartości bool, zapisuje 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 odbiornika: bool w przypadku Toggle, float w przypadku Slidera, którego pozycję określa slider.value. Ustawienie isOn lub value z poziomu kodu zmienia kontrolkę tak, jak zrobiłby to gracz, więc po zmianie wartości wywoływani są również odbiorcy. Dlatego odbiornik jest dodawany po wczytaniu wartości: gdyby został dodany wcześniej, uruchamiałby się przy każdym starcie i od razu zapisywałby z powrotem wczytaną wartość. SetIsOnWithoutNotify i SetValueWithoutNotify ustawiają kontrolkę bez wywoływania jakiegokolwiek odbiornika.
Wartość domyślna określa, 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) zwraca 1.5 dla nowego gracza.
Wyzwanie
ŚredniEkran ustawień zawiera suwak głośności od 0 do 1 oraz tekst, który wyświetla ją w procentach. Zapisuj głośność jako ustawienie pod kluczem Volume:
- Nowy gracz zaczyna z głośnością 0.8, wyświetlaną jako Volume: 80%.
- Głośność dotyczy całej gry dzięki
AudioListener.volume, głównej głośności Unity w zakresie od 0 (cisza) do 1 (pełna głośność), która skaluje wszystkie dźwięki w grze. - Po uruchomieniu gry zapisana głośność zostaje zastosowana, a suwak i tekst ją wyświetlają.
- Gdy gracz przesuwa suwak, zostaje zastosowana nowa głośność, tekst się aktualizuje, a głośność zostaje zapisana.
ShowVolume(float volume) już wyświetla tekst.
Naciśnij Play i przesuń suwak, następnie Stop i ponownie Play, a potem Check.
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) + "%";
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski 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 banku