Menu
CoddyTech

Mit einem Standardwert laden

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 23 von 56.

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 wählen, wie viele computergesteuerte Rivalen an einem Rennen teilnehmen, und ein neuer Spieler sollte gegen 3 antreten. Jeder Get-Aufruf nimmt ein zweites Argument entgegen, den Standardwert, den er zurückgibt, wenn der Schlüssel fehlt:

int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");

Sobald der Spieler 0 Rivalen speichert, um allein zu üben, gibt GetInt("Rivals", 3) 0 zurück: Der Standardwert wird nur eingesetzt, wenn ein Schlüssel fehlt. Deshalb ist if (rivals == 0) rivals = 3; der falsche Weg, um einen Standardwert festzulegen. Damit lässt sich ein gespeicherter Wert von 0 nicht von einem nicht gespeicherten Wert unterscheiden, und in jedem Übungsrennen treten wieder 3 Rivalen an.

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 dem ersten Speichern gibt der Aufruf true zurück, bis der Schlüssel mit PlayerPrefs.DeleteKey entfernt wird.

challenge icon

Aufgabe

Mittel

Der Arcade-Automat speichert die Credits eines Spielers unter dem Schlüssel Credits: Mit der Leertaste wird ein Spiel für einen Credit gestartet, und die verbleibenden Credits werden nach jedem Spiel gespeichert. Neue Spieler werden noch nicht berücksichtigt:

  • Ein Spieler, für den nichts gespeichert ist, beginnt mit 5 kostenlosen Credits. Ein Spieler, der alle Credits aufgebraucht hat, hat 0 gespeichert und beginnt mit 0, nicht mit 5.
  • Das Objekt welcomeText (Welcome! Here are 5 free credits) wird nur einem Spieler angezeigt, für den keine Credits gespeichert sind. Alle anderen Spieler sehen es nicht.

Drücke Play und spiele ein Spiel, drücke dann Stop und erneut Play: Die Begrüßung ist verschwunden. Drücke dann Check.

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;
    }
}
quiz iconTeste dich selbst

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