Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Gib einem neuen Spieler 5 kostenlose Credits und eine Begrüßung.

  1. Lade in Start() mit einem Standardwert: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. Ersetze welcomeText.SetActive(false); durch welcomeText.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

Übe selbstständig: Unity-Playground