Jump to content
Unity Insider Forum

Listen mit Koordinaten beim Szenenwechsel nicht zerstören


Garzec

Recommended Posts

Hallo,

leider kann man ja in den PlayerPrefs nur ints und floats speichern. Da ich für die Schule ein "Schiffe Versenken" programmiere, möchte ich in einer Szene eine Platzierungsauswahl basteln und in der anderen Szene dann "spielen".

 

Die Schiffskoordinaten sollen dabei dann einfach weitergereicht werden, abgespeichert in Listen mit dem Wert Vector2.

 

Beim "Spiel Starten"-Button sind meine Listen laut Debugger korrekt gefüllt. Diese befinden sich in einem Script, das sich an einem leeren GameObject befindet, das nicht zerstört werden soll.

 

public class SceneConnector : MonoBehaviour
{
   private List<Vector2> playerShipCoordinatesList = new List<Vector2>();
   public List<Vector2> PlayerShipCoordinatesList { get { return playerShipCoordinatesList; } set { playerShipCoordinatesList = value; } }
   private List<Vector2> enemyShipCoordinatesList = new List<Vector2>();
   public List<Vector2> EnemyShipCoordinatesList { get { return enemyShipCoordinatesList; } set { enemyShipCoordinatesList = value; } }
   private void Awake()
   {
    DontDestroyOnLoad(gameObject);
   }
}

 

In der Spielszene rufe ich dann diese Koordinaten wieder ab. Dort sind die Listen aber wieder leer. Also zum Testen nutze ich zb das hier:

 

    foreach (Vector2 item in connector.PlayerShipCoordinatesList)
    {
	    Debug.Log(item);
    }
    Debug.Log("----------");
    foreach (Vector2 item in connector.EnemyShipCoordinatesList)
    {
	    Debug.Log(item);
    }

 

Werden diese Listen also trotzdem geleert oder mache ich etwas falsch? Das Objekt ist nach Szenenwechsel ja noch vorhanden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin Garzec,

 

es gibt hier viele Möglichkeiten dein Problem zu lösen. Dein Problem befasst sich mit der Persitenz von Informationen.

 

Eine Möglichkeit probierst du ja gerade aus. Also du hast ein GameObject mit einer Komponente, welche die thematisierten Listen als Eigenschaft inne hat. Da bei einem Szenenwechsel das GameObject zerstört wird, rufst du DontDestroyOnLoad auf. Das ist komplett in Ordnung, um dann gewisse Dinge im Scope zu halten.

 

Dein Problem wird wohl dort auszumachen sein, wo du Elemente zu deiner Liste hinzufügst. Weil so initialisierst du Listen und hast eben noch keine Elemente hinzugefügt. Ich würde dann eher deinen SceneConnector in einen CoordinatesManager oder so umwandeln, dann gibst du der Klasse noch Methoden um das hinzufügen von Koordinaten zu ermöglichen.

 

 

Du kannst aber auch auf ein GameObject verzichten, in dem du eine statische Klasse, die nicht von Monobehaviour erbt, erstellst.

 

Dann gibt es noch die Möglichkeit die Koordinaten in einer Datei zu speichern und dann wieder auszulesen, aber das passt jetzt nicht wirklich zu deinem Anwendungsfall.

 

 

edit: Mr 3d hat einen wichtigen Punkt wegeditiert: Du darfst dann das GameObject mit der "SceneConnector" nicht zweimal haben, sondern nur einmal.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...