Jump to content
Unity Insider Forum

Speichern beim mehreren Szenen


chrische5

Recommended Posts

Hallo

Ich habe jetzt zwei Szenen und bisher ein guten workaround zum Speichern. Ich habe einen Container, der alle Daten hält, die gespeichert werden müssen. Das funktioniert gut. Nun habe ich allerdings mehr als eine Szene und natürlich in der zweiten Szene nicht alle Daten, die ich zum Speichern brauche. Wie löst man so etwas? Meine erste Idee: Wenn ich in die zweiten Szene wechsele, speichere ich im Hintergrund alle Daten des ersten Levels und im zweiten Level lege ich einen neuen Container an. Immer wenn ich dann speichere, nehme ich den aktuellen Container und die Daten, die ich im Hintergrund gespeichert habe. Irgendwie kommt mir das komisch vor. Ist das ein bekanntes Problem? Wenn ja, gibt es eine stabile Lösung dafür?

 

Christoph 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

 

Ich habe mindestens zwei scenes. Wenn ich mich zum Beispiel in der zweiten befinde und dann speichern will, habe ich ein Problem: ich speichere eben auch Zustände von GO. Wenn ich die aber gar nicht mehr in meiner Szene habe, kann ich sie ja nicht speichern. Beispielsweise speichere ich, ob eine bestimmtes GO aktiv ist. Das kann ich ja einfach abfragen, wenn ich in der entsprechenden Szene bin, wenn ich allerdings bereits in einer anderen bin, weiß ich ja nix mehr über den Zustand des GO als ich wechselte. Nun dachte ich dran, beim Wechsel die ganzen Daten der ersten Szene in einer Datei zu speichern und dann von dort wieder auszulesen. Das scheint mir aber nicht sinnvoll zu sein. Je mehr in darüber nachdenke, komme ich zu dem Entschluss, das ganze noch weiter zu kapseln. Dem SaveContainer also nicht mehr direkt die GO zum Auslesen zu geben, sondern sie nur noch mit den entsprechenden Daten zu füttern. Ist das jetzt verständlicher?

 

 

Christoph 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Speichern, also das Ablegen der Daten auf einen Datenträger sollte man so wenig wie möglich tun. Vorallem nicht, wenn es um große Datenmengen geht.
Bei einem Wechel einer Szene finde ich das aber in Ordnung, solange der Wechsel nicht ständig passiert.

Aber es hängt natürlich davon ab, ob es ein automatisches Speichern sein soll oder ob du den Spieler entscheiden lassen willst, wann und ob gespeichert wird.
Es könnte ja sein, dass, je nach Art des Spiels, der Spieler sich dazu entscheidet nicht zu speichern weil etwas schief gelaufen ist.

Wenn du außerdem nur eine einzelne Datei erzeugen willst, also nicht für jede Szene extra, dann musst du die Daten eben im Ram ablegen, z.B. als JSON String oder in einer Liste / Array / Dictionary, und dann mit den anderen Daten der anderen Szenen zusammen abspeichern.

Du könntest natürlich auch eine temporäre Datei auf dem Datenträger anlegen, die du dann beim "finalen" Speichern einfach nochmal einliest, mit den anderen Daten verknüpfst und als Savegame abspeicherst. Die Temporäre Datei würde danach gelöscht werden.
Ich persönlich würde das aber nicht machen.

Trotzdem gibt es viele Spiele, die beides unterstützen. Ein Autosave, der automatisch den Fortschritt speichert und nützlich ist, wenn der Rechner mal abschmieren sollte, und das manuelle Speichern der Spielstände.
Genauso gibt es viele Spiele, die je Spielstand ganz viele Dateien anlegen. Das können einzelne Szenen sein und auch einzelne Wertegruppen.
Unüblich ist das also alles nicht.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

 

vor 21 Stunden schrieb chrische5:

Hallo

 

Ich habe mindestens zwei scenes. Wenn ich mich zum Beispiel in der zweiten befinde und dann speichern will, habe ich ein Problem: ich speichere eben auch Zustände von GO. Wenn ich die aber gar nicht mehr in meiner Szene habe, kann ich sie ja nicht speichern. Beispielsweise speichere ich, ob eine bestimmtes GO aktiv ist. Das kann ich ja einfach abfragen, wenn ich in der entsprechenden Szene bin, wenn ich allerdings bereits in einer anderen bin, weiß ich ja nix mehr über den Zustand des GO als ich wechselte. Nun dachte ich dran, beim Wechsel die ganzen Daten der ersten Szene in einer Datei zu speichern und dann von dort wieder auszulesen. Das scheint mir aber nicht sinnvoll zu sein. Je mehr in darüber nachdenke, komme ich zu dem Entschluss, das ganze noch weiter zu kapseln. Dem SaveContainer also nicht mehr direkt die GO zum Auslesen zu geben, sondern sie nur noch mit den entsprechenden Daten zu füttern. Ist das jetzt verständlicher?

 

 

Christoph 

Ahh verstanden. Also ich würde es lieber nicht dafür meine Festplatte belasten. Egal ob es dabei um eine Kleinigkeit geht :D. Ich hab z.B. HDDs die sich bei Inaktivität ausschalten. Und das sind die meistens beim Zocken auch. Dadurch kriegt mein PC auch minimal mehr Power. Aber das ist ne Kleinigkeit.

Ich würde ein Script benutzen und dort die States eines GOs abspeichern. Eigentlich würde ich ja diesen GO duplizieren oder den Original mitnehmen und einfach mit rüber in die neue Scene bringen mit DontDestroyOnLoad. Wäre sogar etwas leichter. Nachdem die Arbeit fertig ist mit Destroy löschen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...