Eine Zahl speichern
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 22 von 60.
Jedes Feld nimmt den Standardwert an, wenn das Spiel startet. Ein Spieler, der 40 Edelsteine sammelt, das Spiel beendet und morgen zurückkommt, findet die Anzahl der Edelsteine bei 0, weil das Beenden das Spiel und alles darin beendet. PlayerPrefs speichert kleine Werte zwischen den Spielen auf dem Gerät des Spielers. Jeder Wert wird unter einem Schlüssel gespeichert, einer Zeichenfolge, die du auswählst, mit SetInt, SetFloat oder SetString:
PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();Um einen Wert wieder auszulesen, ruf die Get-Methode desselben Typs mit demselben Schlüssel auf. Ein Schlüssel, der nie gespeichert wurde, wird als 0, 0 oder als leere Zeichenfolge gelesen. Deshalb zeigt diese Begrüßung beim ersten Spiel eines Spielers einen leeren Namen und Level 0 an:
void Start()
{
string player = PlayerPrefs.GetString("PlayerName");
int level = PlayerPrefs.GetInt("LevelReached");
Debug.Log(player + " is on level " + level);
}Bei Schlüsseln wird zwischen Groß- und Kleinschreibung unterschieden: GetInt("levelreached") liest einen Schlüssel, der nie gespeichert wurde, und gibt 0 zurück. Ein Schlüssel speichert einen einzigen Typ, also lies ihn mit der Get-Methode aus, die zu seinem Set-Aufruf passt. Speichere einen Wert, wenn er sich ändert, nicht erst, wenn das Spiel endet. Unity schreibt PlayerPrefs auf die Festplatte, wenn das Spiel normal beendet wird, und PlayerPrefs.Save() schreibt sie sofort, damit sie bei einem Absturz nicht verloren gehen. Ein static-Feld hilft dabei nicht: Es bleibt nur so lange bestehen, wie das Spiel läuft, und beim Beenden endet auch das.
Aufgabe
MittelMach die Sprunganzahl zu einer lebenslangen Gesamtzahl, die zwischen den Spielen gespeichert wird.
- Füge in
Update()nachjumps++;PlayerPrefs.SetInt("TotalJumps", jumps);undPlayerPrefs.Save();hinzu. - Lade sie in
Start()oberhalb vonShowJumps();:jumps = PlayerPrefs.GetInt("TotalJumps");.
Drücke auf „Spielen“ und springe, dann auf Stop und erneut auf „Spielen“: Die Zählung wird fortgesetzt. Drücke dann auf „Prüfen“.
Probier es selbst
using UnityEngine;
using TMPro;
public class JumpCounter : MonoBehaviour
{
public TMP_Text jumpsText;
public float hop = 5f;
private Rigidbody rb;
private int jumps;
void Start()
{
rb = GetComponent<Rigidbody>();
ShowJumps();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.linearVelocity = Vector3.up * hop;
jumps++;
ShowJumps();
}
}
void ShowJumps()
{
jumpsText.text = "Jumps: " + jumps;
}
}
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