Einstellungen speichern
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 25 von 60.
Eine Einstellung wird einmal ausgewählt und soll danach in jedem Spiel wieder verfügbar sein, deshalb gehört sie in PlayerPrefs. Wenn das Spiel startet, lade die Einstellung, übernimm sie in das Steuerelement, damit sie auf dem Einstellungsbildschirm angezeigt wird, und wende sie auf das Spiel an. Wenn der Spieler das Steuerelement ändert, wende den neuen Wert an und speichere ihn. Dieser Umschalter (using UnityEngine.UI;) blendet den Timer auf dem Bildschirm ein oder aus. Da PlayerPrefs keinen booleschen Wert unterstützt, speichert er 1 für ein und 0 für aus:
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 übergibt dem Listener den neuen Wert des Steuerelements: einen bool für einen Umschalter und einen float für einen Schieberegler, dessen Position slider.value ist. Wenn du isOn oder value im Code festlegst, ändert sich das Steuerelement so, als hätte der Spieler es geändert. Wenn sich der Wert ändert, werden daher auch die Listener aufgerufen. Deshalb wird der Listener erst nach dem Laden hinzugefügt: Würde er zuerst hinzugefügt, würde er bei jedem Start ausgeführt und den geladenen Wert direkt wieder speichern. Mit SetIsOnWithoutNotify und SetValueWithoutNotify kannst du ein Steuerelement ändern, ohne einen Listener aufzurufen.
Der Standardwert bestimmt, was ein neuer Spieler erhält. GetInt("ShowTimer", 1) zeigt den Timer an, bis der Spieler ihn ausschaltet; bei einem Standardwert von 0 wäre er für alle ausgeblendet, die nie die Einstellungen geöffnet haben. Eine Gleitkomma-Einstellung wird auf dieselbe Weise geladen: mit PlayerPrefs.GetFloat(key, defaultValue). GetFloat("MouseSensitivity", 1.5f) gibt einem neuen Spieler den Wert 1.5. Eine Lautstärkeeinstellung wird auf AudioListener.volume angewendet, die Master-Lautstärke von Unity von 0 (stumm) bis 1 (volle Lautstärke), die alle Geräusche im Spiel skaliert.
Aufgabe
MittelSpeichere den Lautstärkeregler unter dem Schlüssel Volume als Einstellung.
- Lade in
Start()PlayerPrefs.GetFloat("Volume", 0.8f), weise den Wertslider.valueundAudioListener.volumezu und rufeShowVolumeauf. - Füge dann
slider.onValueChanged.AddListener(OnVolumeChanged);hinzu. - Übernimm in
OnVolumeChangedvaluefürAudioListener.volume, zeige den Wert an und speichere ihn mitPlayerPrefs.SetFloatundPlayerPrefs.Save().
Drücke „Spielen“ und bewege den Regler, dann „Stop“ und „Spielen“: Er bleibt an der Stelle, an der du ihn gelassen hast. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// Lade die gespeicherte Lautstärke, wende sie an und zeige sie an. Reagiere anschließend auf Änderungen am Slider.
}
void OnVolumeChanged(float value)
{
// Wende die neue Lautstärke an, zeige sie an und speichere sie.
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der BankÜbe selbstständig: Unity-Playground