Eine Zahl speichern
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 22 von 56.
Jedes Feld beginnt beim Start des Spiels mit seinem Standardwert. Ein Spieler, der 40 Edelsteine sammelt, das Spiel beendet und morgen zurückkommt, findet den Edelsteinzähler 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 mit SetInt, SetFloat oder SetString auswählst:
PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();Um einen Wert wieder auszulesen, rufst du 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 ausgelesen. Daher 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 aus, der nie gespeichert wurde, und gibt 0 zurück. Ein Schlüssel speichert einen Wert eines bestimmten Typs. Lies ihn also mit der Get-Methode aus, die zum Set-Aufruf passt. Speichere einen Wert, wenn er sich ändert, und nicht erst, wenn das Spiel endet. Unity schreibt PlayerPrefs auf die Festplatte, wenn das Spiel normal beendet wird, und PlayerPrefs.Save() schreibt sie sofort, sodass sie bei einem Absturz nicht verloren gehen können. Ein static-Feld ist keine Möglichkeit, das zu umgehen: Es bleibt so lange bestehen, wie das Spiel läuft, und beim Beenden endet auch das.
Aufgabe
MittelDer JumpCounter des Hoppers zählt seine Sprünge auf dem Bildschirm, aber der Zähler ist ein einfaches Feld, sodass jedes neue Spiel wieder bei Jumps: 0 beginnt. Mach daraus eine lebenslange Gesamtzahl, die von Spiel zu Spiel weitergeführt wird:
- Speichere nach jedem Sprung
jumpsmitPlayerPrefs.SetIntunter dem SchlüsselTotalJumpsund schreibe den Wert mitPlayerPrefs.Save()auf die Festplatte. - Lade in
Start()die gespeicherte Gesamtzahl injumps, bevor der Text sie anzeigt.
Drücke Play und springe ein paar Mal, drücke dann Stop und erneut Play: Der Zähler läuft weiter. Danach Check.
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;
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons 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