In meiner Inventory-Klasse Ich habe das Inventar selbst als Wörterbuch definiert, wobei die Schlüssel die Artikelobjekte und die Werte die Artikelmengen (ints) sind.
Ich habe ein GetItem(string key)< /code>-Methode in meiner Inventarklasse, die den Artikel zurückgibt, wenn die Eingabezeichenfolge vorliegt stimmt mit dem überein, was von der getName()-Methode des Elements zurückgegeben wird (d. h. stimmt die Eingabe mit dem Namen des Elements überein).
Aus irgendeinem Grund ist es erfolgreich in der Lage, das Element zu finden (Sagen wir, Apple) im Inventar, wenn ich beispielsweise GetItem("Apple") aufrufe, sobald ich einen Apfel aufhebe, aber wann immer ich überprüfe, ob er null ist, ist dies immer der Fall.
Inventarklasse:
Code: Select all
public class Inventory : MonoBehaviour
{
public Dictionary inventory = new Dictionary();
public TextMeshProUGUI inventoryText;
public static event Action InventoryUpdated;
// Update is called once per frame
void Update()
{
InventoryUpdated += UpdateInventoryDisplay;
UpdateInventoryDisplay();
}
private void UpdateInventoryDisplay()
{
inventoryText.text = "";
foreach (var item in inventory)
{
inventoryText.text += $"{item.Key.getName()}: {item.Value}\n";
}
}
///
/// Method to add an item to the player's inventory.
/// Each unique item is stored as a key.
/// If an item doesn't already exist as a key, then add it to the inventory, and add it as a key.
/// Else, just increment the count of the item.
///
public void Add(Item item){
if (inventory.ContainsKey(item)){
inventory[item] += 1;
}
else {
inventory.Add(item, 1);
}
// Trigger the InventoryUpdated event
InventoryUpdated?.Invoke();
}
///
/// Method to use an item in the inventory dictionary.
/// Need to specify what item to use, and how many.
///
public void Use(Item item, int amount){
if (inventory.ContainsKey(item)){
inventory[item] -= amount;
if (inventory[item]