Vom Spieler platzierte Objekte speichern. Wie?

  • Guten Abend,


    ich überlege schon die ganze Zeit, wie ich einem vom Spieler platziertem Objekt sagen kann, dass er gespeichert werden soll. Und alle seine zukünftigen Freunde auch. Man müsste ja theoretisch dem Actor sagen, dass er seine Position an Savegame schickt. Aber dort gibt es nicht genug Stühle(Variablen). Also müsste er sich einen mitbringen. Doch man kann doch keine Variable in einem anderen BP generieren oder?


    Hat da jemand eine Idee?:/

  • Deine Erläuterungen sind nicht gerade auf den Punkt gebracht.

    Was hindert dich denn daran im Savegame diese Informationen abzuspeichern?

    Struct mit Actor und Location ggf. Transform und diese bei jedem neuen abzuspeichernden Objekt ins bespeicherte StructArray hinzufügen.

  • Deine Erläuterungen sind nicht gerade auf den Punkt gebracht.

    Was hindert dich denn daran im Savegame diese Informationen abzuspeichern?

    Struct mit Actor und Location ggf. Transform und diese bei jedem neuen abzuspeichernden Objekt ins bespeicherte StructArray hinzufügen.

    Schon alle möglichen Variationen versucht.


    Actor und seine Transform jeweils in einen Array geaddet und gespeichert.


    Dann

    <actor array variable> -> for each loop ->

    und

    <actor transform variable> -> for each loop ->


    Und das dann mit set location, set rotation, set scale 3D verknüpft.


    Beim triggern kam dann immer eine fehlermeldung. Teilweise bei einem Branch im for each loop.

  • Der Fehler lag wohl im Detail. Für dein oben genanntes Problem ist das eine mögliche Lösung.


    -Erstelle ein Struct mit zwei Variablen: Actor und Transform.

    -Erstelle ein SaveGame mit dem Struct als Array.

    -Speichere die Objekte in dem du den Actor als Class und dessen Transform als neuen Member des StructArray einfügst.

    -Beim Laden die gespeicherten Variablen auslesen und als neuen Actor spawnen.


    Das sollte eigentlich dein Problem abdecken. Wenn wieder Fehler auftauchen, dann bitte sämtlichen Blueprintspaghetticode als Bild(er) anhängen.

  • Ich habe bis 5 Uhr dran gesessen. Schlafen gegangen und um 10 weiter gemacht. Wenn das hier die Lösung fallen ich aus allen Wolken xD Jetzt bin ich auf Arbeit bis 22 Uhr. Danach versuche ich das mal. Danke dir. Habe mich noch nicht so mit Arrays befasst. Oder mit Structs. Weiß auch noch nicht wie man dort member addet. Auch einfach mit Refs? Oder gibst sowas wie Set Member? Ich finde es schon heraus. Aber danke dir dafür schon mal.

  • Ich muss noch ein bisschen lernen. Bin jetzt ziemlich erschöpft. Sitze schon min 16 Stunden an dem Problem. Das zieht mein Projekt ziemlich in die Länge. :(


    Habe es jetzt so gemacht wie du gesagt hast. Kannst du mal bitte drüber schauen? Habe ein recht übersichlichen Screenshot erstellt:


    [Blockierte Grafik: https://ibb.co/nw59FDm]


    Ich glaube meine Konzentration lässt nach. Aber vielleicht erkennst du ja den Fehler.

  • -Das Structure sieht soweit in Ordnung aus. Ich würde halt anstatt nem Actor die Klasse nehmen, dann kannst du beim Spawnen jegliche Arten von Objekten spawnen. Vom Actor kann man ja auf einfachste Weise die Klasse ermitteln (getClass).

    -Ansonsten benutzt du beim Laden "Savegame", wobei dort eher "Loadgame" benutzt werden sollte.

    -Vom geladenen Struct ein ForEachLoop einbauen, dass jeder Teil des Arrays benutzt wird. In den Loop dann den SpawnActor rein und das Get mit dem Index des Loops versehen.

    -Im Übrigen brauchst du kein "Does Savegame Exist", wenn du im Nachhinein keine Boolean abfragst.

    Ist keine Fehlerquelle, aber nutzlos. Dementsprechend muss danach eine Branch hin, die die Boolean abfragt, oder es sollte weg. Im Idealfall sollte es natürlich hin, aber beim Testen ist es egal.

    -Das Speichern würde ich nach dem Loop machen. Sollte zwar auch keinen Fehler ergeben, spart aber Rechenleistung.


    Was ist denn der Fehler bis dato?

    So wie es aussieht, wird halt nur der erste Actor einmalig gespawnt, oder gibt es noch weitere Probleme?

  • In den Loop dann den SpawnActor

    Also erst Spawn Actor und dann den Loop? Kann mir das nicht so ganz vorstellen. Habe geraten wie du das meinst. Das Ergebnis war das Selbe.



    So wie es aussieht, wird halt nur der erste Actor einmalig gespawnt, oder gibt es noch weitere Probleme?

    Es ist rein gar nichts passiert :/


    Macht das eigentlich einen unterschied ob man bei Array --> get (ref) / get (copy) nimmt?


    Irgendwie muss das ja zu schaffen sein... https://ibb.co/wzkkDSy


    Edit: Das Loadgame ist nur ein Ref zum Load game from slot. Kann damit also nicht zum savegame casten.

  • Ganz vergessen, so wie du den Loop gemacht hast ist es richtig. Dann brauchst du das Get auch nicht mehr.


    Die Fehlermeldung kommt von der Verwechslung zwischen Loadgame und Savegame am Schluss.

    Das Savegame wird mit dem Speichern quasi geschlossen, weswegen es "accessed none trying to read property.." ausgibt.

    Einfach das Array welches auf den letzten Loop verweist mittels Loadgame initiieren.