Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Ekran 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) + "%";
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier