Jump to content
Unity Insider Forum

Inventory (Container)


MAThieuAT

Recommended Posts

Ich hab da eine Frag ich hab mir ein system per youtube gesucht das mich anspricht und das funktoniert recht gut ich hab es aber noch nicht ganz verstadnen und müsste jetzt darin suchen und zugreifen.

 

ich hab verschiedenen inventorie die ein Container sind und ich will jetzt mit einem script prüfen ob ein bestimmtest objekt dort hinterlegt ist und welche mengen (Amount)  und dann würde ich noch auf die Daten die dem Item hinterlegt ist zugreifen (Beschreibung, Akt Bonus)

hinzufügen kan ich dem container mit 

inventory.AddItem(item.item, -1);

Wie kann ich darauf zugreifen und das abfragen und weiterverarbeiten?

Screenshot 2022-01-19 095831.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also anscheinend arbeitet man bei dir mit den Namen also suche doch nach namen mit ner schleife zb for each oder so und wenn der gesuchte name vorhanden ist, ist das item vorhanden.

EquipmentObject item = null;
foreach(var equipmentObjectItem in inventory)
{
    if(equipmentObjectItem.name == gesuchtesItemName)
    {
        item = equipmentObjectItem;
    }
}

if(item != null)
{
    Debug.Log("Gefunden");
}

Musst natürlich den Code für dein Script anpassen.

Übrigens.. Wieso ist Type ein Enum, wenn man schon mit ScriptableObject arbeitet? Kann man ja dafür auch benutzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 20.1.2022 um 20:12 schrieb MaZy:

Also anscheinend arbeitet man bei dir mit den Namen also suche doch nach namen mit ner schleife zb for each oder so und wenn der gesuchte name vorhanden ist, ist das item vorhanden.

EquipmentObject item = null;
foreach(var equipmentObjectItem in inventory)
{
    if(equipmentObjectItem.name == gesuchtesItemName)
    {
        item = equipmentObjectItem;
    }
}

if(item != null)
{
    Debug.Log("Gefunden");
}

Musst natürlich den Code für dein Script anpassen.

Übrigens.. Wieso ist Type ein Enum, wenn man schon mit ScriptableObject arbeitet? Kann man ja dafür auch benutzen.

 

Bekomme Fehler:

error CS1579: foreach statement cannot operate on variables of type 'InventoryObject' because 'InventoryObject' does not contain a public instance definition for 'GetEnumerator'

habe das Script angepasst

 

    public ItemObject item;
    public InventoryObject inventory;


 void OnMouseDown()
    {
       // Debug.Log("Ich wurde gedrückt");

        var item  = gameObject.GetComponent<Bilding>();
        inventory.AddItem(item.item, -1);

    
        EquipmentObject item2 = null;
            foreach(var equipmentObjectItem in inventory)
            {
            if(equipmentObjectItem.name == item)
                {
                    item2 = equipmentObjectItem;
                }
            }

            if(item2 != null)
            {
                 Debug.Log("Gefunden");
            }
     }    

 

Woher kommt der Fehler und ist es ok das ich das item zu item2 geändert habe da ich ja sonst die variable doppelt belegen würde.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Inventarliste besteht aus Variablen der Art item sowiet ich das sehe.

Dann versuch mal

 

string NameDesgesuchtenItems = "Hier steht der Name des gesuchten Gameobjects";   // was wird gesucht?

item gesuchtesItem = null;                              // erstmal ist nichts vorhanden

foreach (item suchItem in inventory)

{ if (suchItem.name == NameDesgesuchtenItems)

              gesuchtesItem = suchItem;

}

if (gesuchtesItem != null)

                Debug.Log("gefunden wurde " + gesuchtesItem.Name);

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Stunden schrieb Lewo:

Deine Inventarliste besteht aus Variablen der Art item sowiet ich das sehe.

Dann versuch mal

 

string NameDesgesuchtenItems = "Hier steht der Name des gesuchten Gameobjects";   // was wird gesucht?

item gesuchtesItem = null;                              // erstmal ist nichts vorhanden

foreach (item suchItem in inventory)

{ if (suchItem.name == NameDesgesuchtenItems)

              gesuchtesItem = suchItem;

}

if (gesuchtesItem != null)

                Debug.Log("gefunden wurde " + gesuchtesItem.Name);

Da hab ich gleich mehrere Fehlermeldungen

 

Screenshot 2022-01-22 175500.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 22.1.2022 um 04:46 schrieb MAThieuAT:

 

Bekomme Fehler:

error CS1579: foreach statement cannot operate on variables of type 'InventoryObject' because 'InventoryObject' does not contain a public instance definition for 'GetEnumerator'

habe das Script angepasst

 

    public ItemObject item;
    public InventoryObject inventory;


 void OnMouseDown()
    {
       // Debug.Log("Ich wurde gedrückt");

        var item  = gameObject.GetComponent<Bilding>();
        inventory.AddItem(item.item, -1);

    
        EquipmentObject item2 = null;
            foreach(var equipmentObjectItem in inventory)
            {
            if(equipmentObjectItem.name == item)
                {
                    item2 = equipmentObjectItem;
                }
            }

            if(item2 != null)
            {
                 Debug.Log("Gefunden");
            }
     }    

 

Woher kommt der Fehler und ist es ok das ich das item zu item2 geändert habe da ich ja sonst die variable doppelt belegen würde.

Hallo, der Pseudecode  ist jetzt nicht zu Copy&Pasten gedacht. War nur ein Vorschlag, wie du das machen kannst. Die richtigen Variablen und Code musst du natürlich selbst einsetzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

so hab ich es jetzt lösen können:

 

                int gefunden;
   			    int gefundenePos;

------------------------------------------

				var item  = gameObject.GetComponent<Bilding>();
                for(int i =0; i < inventory.Container.Count; i++)
                {
                    // Überprüfung ob benötigte Items in Player Inventar vorhanden ist
                    if (inventory.Container[i].item == item.item)
                        {
                            //Debug.Log(inventory.Container[i].item + " Anzahl " + inventory.Container[i].amount);
                            gefunden = inventory.Container[i].amount; // es wurde im PlayerInventar das benötigte Item gefunden
                            gefundenePos = i;
                        }
                }

 

nach diesen Eintrag hab ich auch ewig gesucht, um ein item zu löschen.  

inventory.Container.RemoveAt (gefundenePos);

 

 

Danke für Eure Hilfestellung!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...