MAThieuAT Geschrieben 19. Januar 2022 Melden Share Geschrieben 19. Januar 2022 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? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 20. Januar 2022 Melden Share Geschrieben 20. Januar 2022 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 More sharing options...
MAThieuAT Geschrieben 22. Januar 2022 Autor Melden Share Geschrieben 22. Januar 2022 liegt wohl daran das ich neu bin und mir das scrip hier abgeschaut habe. https://www.youtube.com/playlist?list=PLJWSdH2kAe_Ij7d7ZFR2NIW8QCJE74CyT Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MAThieuAT Geschrieben 22. Januar 2022 Autor Melden Share Geschrieben 22. Januar 2022 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 More sharing options...
Lewo Geschrieben 22. Januar 2022 Melden Share Geschrieben 22. Januar 2022 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 More sharing options...
MAThieuAT Geschrieben 22. Januar 2022 Autor Melden Share Geschrieben 22. Januar 2022 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 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 23. Januar 2022 Melden Share Geschrieben 23. Januar 2022 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 More sharing options...
MAThieuAT Geschrieben 23. Januar 2022 Autor Melden Share Geschrieben 23. Januar 2022 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 More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.