Garzec Geschrieben 26. Februar 2017 Melden Share Geschrieben 26. Februar 2017 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 More sharing options...
Mr 3d Geschrieben 26. Februar 2017 Melden Share Geschrieben 26. Februar 2017 edit:*Sry^^ hab mich verlesen* Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MarcoMeter Geschrieben 26. Februar 2017 Melden Share Geschrieben 26. Februar 2017 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 More sharing options...
Sascha Geschrieben 26. Februar 2017 Melden Share Geschrieben 26. Februar 2017 Du kannst aber auch auf ein GameObject verzichten, in dem du eine statische Klasse, die nicht von Monobehaviour erbt, erstellst. Das, oder ein statisches Feld in einer nicht-statischen Klasse - die darf dann auch, wenn sinnvoll, wieder von MonoBehaviour erben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Garzec Geschrieben 26. Februar 2017 Autor Melden Share Geschrieben 26. Februar 2017 Ich habe mich für die static Variante entschieden 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.