Menu
CoddyTech

Werkbank

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

In einem Survival-Spiel verwandelt eine Werkbank das, was du sammelst, in Dinge, die du verwenden kannst. Zwei Schaltflächen sammeln Holz und Stein, und drei Rezepte machen mehr daraus: Aus zwei Holz wird ein Brett, aus einem Brett und zwei Steinen wird eine Axt, aus vier Brettern wird ein Floß. Eine Rezept-Schaltfläche kann nur gedrückt werden, wenn das Inventar alles enthält, was das Rezept benötigt, und beim Herstellen werden diese Dinge verbraucht. Die Rezepte werden als Daten in der Werkbank im Inspector eingetragen, sodass ein neues Rezept keinen neuen Code benötigt. Das Inventar kündigt jede Änderung allen an, die darauf hören, und wird jedes Mal als JSON gespeichert, wenn es sich ändert. So geht beim Beenden des Spiels nichts verloren.

Das Ganze entsteht in zwei Lektionen. In dieser schreibst du das Inventory für den Backpack; als Nächstes kommen die Rezepte der Werkbank.

challenge icon

Aufgabe

Schwer

Teil 1: Fülle Inventory aus; das Sammeln ist bereit.

  1. Füge serialisierbare Klassen ItemStack (öffentliches item, count) und InventoryData (öffentliches List<ItemStack> stacks) hinzu.
  2. Vervollständige Count, Add, Remove (ein Stapel wird bei 0 entfernt) und Describe: Wood 3, Plank 1 oder empty.
  3. Jede Änderung speichert inventory.json in Application.persistentDataPath und löst Changed aus; Awake lädt die Daten.

Drücke „Spielen“, sammle und starte dann erneut: Das Holz ist wieder da. Drücke danach „Prüfen“.

Probier es selbst

using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

// ItemStack und InventoryData kommen hierhin

public class Inventory : MonoBehaviour
{
    public event Action Changed;

    void Awake()
    {
        // Lade inventory.json, falls die Datei existiert
    }

    public int Count(string item)
    {
        return 0;
    }

    public void Add(string item, int amount)
    {
    }

    public void Remove(string item, int amount)
    {
    }

    public string Describe()
    {
        return "empty";
    }
}

Alle Lektionen in Spielarchitektur in Unity

Übe selbstständig: Unity-Playground