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.
Aufgabe
MittelLass den Spieler einen Slot auswählen und löschen.
- In
Update()addiert der Abwärtspfeil 1 zuselected, und der Aufwärtspfeil zieht 1 ab. MitMathf.MinundMathf.Maxwird der Wert zwischen 0 und 2 gehalten. Rufe anschließendShow()auf. DeleteSelected()löscht mitFile.Deletedie Datei des ausgewählten Slots, setzt den Slot aufnullund ruftShow()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;
}
}
}
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
1Komponenten statt Hierarchien
Kleine KomponentenEin Basis-GegnerskriptAbstrakte KomponentenZusammenwirkende KomponentenRückblick: Modulares GeschützRückblick: Zwillingskanone4Serialisierte Daten
Serialisierbare KlassenListen im InspectorEnums im InspectorRückblick: Loot-TabelleRückblick: Beute auswürfeln2Schnittstellen in Unity
IDamageableSchnittstellen und TryGetComponentGetComponentsZusammenfassung: InteraktionstasteZusammenfassung: Nächstes in Reichweite5ScriptableObjects
Daten-AssetsWaffenwerteGemeinsame EinstellungenDen Wind speichernWellen als DatenRückblick: Item-DatenbankRückblick: Im Shop einkaufen8Wiederverwendbarer Code
ErweiterungsmethodenEin generisches SingletonGenerische HilfsmethodenRückblick: FindNearest3Ereignisse
C#-Ereignisse in UnityIn OnEnable abonnierenUnityEvent-FelderEreignisse steuern die UIRückblick: Erfolgs-PopupRückblick: Popup-Timer6Speichern mit JSON
JsonUtilityDas Spiel speichernLaden und StandardwerteRückblick: SpeicherplätzeSpeicherplatz auswählen und löschenÜbe selbstständig: Unity-Playground