Struct Array ist nach Änderung zurückgesetzt

  • Moin zusammen,


    ich bastel gerade ein bisschen in Unreal rum und habe mir nun ein Blueprint gebaut, welches ein Array bestehend aus einem Struct-Typen mit diversen Daten hält.
    Funktioniert alles wunderbar.
    Das Problem ist, wenn ich den Typen ändere, sprich dem Struct neue Eigenschaften gebe oder nehme usw., dann ist alles, was ich im Editor eingestellt habe, zurückgesetzt.
    Sprich, das komplette Array (bis auf Anzahl der Felder) wieder auf Default.


    Nun habe ich gelesen, dass ich da wohl auch Blueprint Classes für nutzen kann.
    Aber bevor ich was anderes mache, möchte ich erstmal wissen, ob ihr das kennt und ggf. sogar einen Workaround dazu?
    Meine Idee ist, das temporär in ein SaveGame zu schieben, aber ich glaube, dass das Struct schon vor dem Construction Event leer ist.


    LG


    Edit - Workaround:
    Bis der Bug https://issues.unrealengine.com/issue/UE-32965 behoben ist, hat mir Unreal empfohlen einem Workaround zu folgen.
    Wenn man also eine Structure ändern möchte, ohne seine im Level eingestellten Dinge zu verlieren, sollte man:

    • Alles speichern
    • Die Structure anpassen
    • NUR die Structure speichern
    • Editor schließen und bei ggf. Nachfrage NICHT speichern
    • Editor neustarten

    2 Mal editiert, zuletzt von devandart () aus folgendem Grund: Workaround bis der Bug behoben ist

  • Ich komme mit deiner Erklärung nicht ganz zurecht. Zunächst findet eine Rücksetzung einer Variablen dann statt, wenn du den zugrundeliegenden Wert (int,float, etc.) änderst, das ist denke ich verständlich.


    Wenn du dann allerdings von Savegame redest, kommt mir grad der Zusammenhang nicht in den Sinn. Nimm doch für dein Savegame eine Variable mit dem Typ Actor und mach ein Array draus, dann speicherst du alles in dieses Array. Die Daten werden erhalten. Dafür brauchst du kein Struct.


    Wenn ich das richtig sehe, dann gibt es außer Actor nichts, was sich in deinem Level ändern sollte. Denn nur den Typ Actor als oberste Variable kannst du im Spiel verwenden, um zu Interagieren. Ansonsten musst du nur noch deinen Charakter abspeichern.


    Beispiel: Hast du eine Kiste mit Gegenstände, dann besteht das Inventar der Kiste aus einem Struct, aber die Kiste selbst ist ein Actor, ergo, alles was darin an Variablen enthalten ist, also auch das Struct des Inhalts, wird abgespeichert.


    Ich hab das halt so gelöst, und bis dato funktioniert das auch. Die einzige Überlegung ist halt, ob du alle Actors eines Level zu einem bestimmten Zeitpunkt speichern möchtest oder ob du jede Änderung sofort abspeicherst. Beides hat seine Vor und Nachteile.

  • Danke schonmal für deine Hilfeversuch, ich versuche es nochmal anhand einer Kette darzustellen:


    Ich habe ein Blueprint
    -> dieses hat ein Array, bestehend aus dem Typen eines von mir erstellten Structs
    -> dieses Struct hat Eigenschaften, welche man im Editor anpassen kann pro Arrayfeld
    -> ich füge dem Struct-Typen eine Eigenschaft hinzu/ nehme eine weg/ ändere den Namen
    -> speichere
    -> alle im Editor eingestellten Dinge sind auf Default zurückgesetzt, sprich alles an Einstellungen ist futsch.


    Es scheint also so, dass Structs nicht deserialisiert werden, wenn man die Struktur ändert, was sehr schade ist.
    Und hier hoffe ich um einen Workaround oder Tipp.


    Ich hoffe, die Darstellung ist verständlicher. :)


    P.S.: es scheint so, als wäre das hier die beschriebene Problematik und es dürfte sich um einen Bug handeln https://issues.unrealengine.com/issue/UE-32965

  • Das Problem was ich mit einem Struct hatte war, dass dieses Struct mit Variablen bestückt wird und Werte gesetzt werden.


    Anschließend kann ich in einem BP eine Variable erstellen die den Typ des Struct hat und das noch zum Array umwandeln.


    Füge ich jetzt Werte innerhalb des BP in den Struct ein (Inventarsystem) und ändere hintere am Struct selbst etwas, indem ich Variablen ändere oder verschiebe, erfolgt ein reset.


    Denke das meinst du. Das Struct muss mit anderen Worten gut überlegt sein, da man hinterher an dem Struct selbst nichts mehr ändern kann, ohne Verlust zu erleiden.


    Der einzige Workaround den ich kenne, aber der mir wesentlich zu umständlich ist, ist die Einpflegung der Daten in den Struct über eine Tabelle/Datenbank. Quasi eine Import/Export Option.


    Hierzu kann ich dir allerdings nur diesen Hinweis geben, da ich beim Anschauen des Tuts schon nach 20min Kopfschmerzen bekam. Aber sicherlich wirst du unter den Stichworten Table/Struct bei Youtube fündig.


    Viel Spass beim Anschauen wünsch ich dir. ;D