Menu
CoddyTech

Speicherplatz auswählen und löschen

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 34 von 64.

In diesem Kapitel wurden Speicherstände als JSON gespeichert: eine Speicherklasse mit [System.Serializable], Dateien in Application.persistentDataPath und Feldinitialisierer, die fehlende Werte in älteren Speicherständen ergänzen. Das Slot-Menü erhält jetzt seine letzten beiden Steuerelemente.

challenge icon

Aufgabe

Mittel

Lass den Spieler einen Slot auswählen und löschen.

  1. In Update() addiert der Abwärtspfeil 1 zu selected, und der Aufwärtspfeil zieht 1 ab. Mit Mathf.Min und Mathf.Max wird der Wert zwischen 0 und 2 gehalten. Rufe anschließend Show() auf.
  2. DeleteSelected() löscht mit File.Delete die Datei des ausgewählten Slots, setzt den Slot auf null und ruft Show() auf.

Drücke auf „Spielen“, fülle Slot 3 aus und klicke auf „Löschen“: Es wird „leer“ angezeigt. Klicke dann auf „Prüfen“.

Probier es selbst

using System.IO;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class SlotMenu : MonoBehaviour
{
    public TMP_Text[] slotTexts;
    private SlotSave[] slots = new SlotSave[3];
    private int selected;

    void Start()
    {
        for (int i = 0; i < slots.Length; i++)
        {
            if (File.Exists(PathFor(i)))
            {
                slots[i] = JsonUtility.FromJson<SlotSave>(File.ReadAllText(PathFor(i)));
            }
        }
        Show();
    }

    void Update()
    {
        // Mit den Pfeiltasten wird ein Slot ausgewählt
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            if (slots[selected] == null)
            {
                slots[selected] = new SlotSave();
            }
            else
            {
                slots[selected].day++;
                slots[selected].gold += 15;
            }
            File.WriteAllText(PathFor(selected), JsonUtility.ToJson(slots[selected]));
            Show();
        }
    }

    // Die Delete-Schaltfläche ruft diese Methode auf
    public void DeleteSelected()
    {
    }

    string PathFor(int index)
    {
        return Path.Combine(Application.persistentDataPath, "slot" + (index + 1) + ".json");
    }

    void Show()
    {
        for (int i = 0; i < slots.Length; i++)
        {
            string line = "Slot " + (i + 1) + ": ";
            if (slots[i] == null)
            {
                line += "empty";
            }
            else
            {
                line += "Day " + slots[i].day + ", " + slots[i].gold + " gold";
            }
            if (i == selected)
            {
                line = "> " + line;
            }
            slotTexts[i].text = line;
        }
    }
}
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 Spielarchitektur in Unity

Übe selbstständig: Unity-Playground