Mit einem Standardwert laden
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 23 von 60.
Ein Schlüssel, der nie gespeichert wurde, wird als 0 gelesen, und 0 ist für manche Werte kein guter Ausgangspunkt. In einem Rennspiel kann der Spieler auswählen, wie viele Computergegner an einem Rennen teilnehmen, und ein neuer Spieler sollte gegen 3 antreten. Jedes Get nimmt ein zweites Argument entgegen, den Standardwert, den es zurückgibt, wenn der Schlüssel fehlt:
int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");Sobald der Spieler 0 Gegner speichert, um allein zu üben, gibt GetInt("Rivals", 3) 0 zurück: Der Standardwert wird nur für einen fehlenden Schlüssel eingesetzt. Deshalb ist if (rivals == 0) rivals = 3; der falsche Weg, um einen Standardwert festzulegen. So lässt sich eine gespeicherte 0 nicht von einem nicht gespeicherten Wert unterscheiden, und in jedem Übungsrennen sind wieder 3 Gegner dabei.
PlayerPrefs.HasKey(key) gibt an, ob ein Schlüssel jemals gespeichert wurde, unabhängig von seinem Wert. So lässt sich ein erstes Spiel von einem späteren unterscheiden. Dieses Spiel begrüßt einen neuen Fahrer:
void Start()
{
if (!PlayerPrefs.HasKey("Driver"))
{
Debug.Log("First race! Pick a name in the garage.");
}
string driver = PlayerPrefs.GetString("Driver", "Rookie");
Debug.Log("Driver: " + driver);
}Rufe HasKey auf, bevor Code den Schlüssel speichert: Ab der ersten Speicherung gibt es true zurück, bis der Schlüssel mit PlayerPrefs.DeleteKey entfernt wird.
Aufgabe
MittelGib einem neuen Spieler 5 kostenlose Credits und eine Begrüßung.
- Lade in
Start()mit einem Standardwert:credits = PlayerPrefs.GetInt("Credits", 5);. - Ersetze
welcomeText.SetActive(false);durchwelcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.
Drücke auf „Spielen“ und spiele ein Spiel, drücke dann auf „Stoppen“ und „Spielen“: Die Begrüßung ist verschwunden. Drücke dann auf „Prüfen“.
Probier es selbst
using UnityEngine;
using TMPro;
public class ArcadeCredits : MonoBehaviour
{
public TMP_Text creditsText;
public GameObject welcomeText;
private int credits;
void Start()
{
credits = PlayerPrefs.GetInt("Credits");
welcomeText.SetActive(false);
ShowCredits();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
{
credits--;
PlayerPrefs.SetInt("Credits", credits);
PlayerPrefs.Save();
ShowCredits();
}
}
void ShowCredits()
{
creditsText.text = "Credits: " + credits;
}
}
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