Wie kann ich in Unity 3D die Position speichern und wieder Aufrufen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

An sich (technisch/funktional) können PlayerPrefs auch die Spielerposition (aufgeteilt in x/y/z) oder die Szenen-ID speichern. Ich würde mir für solche Spielweltdaten allerdings eher ein eigenes Speicher- und Ladeskript schreiben, welches die Daten wahlweise als JSON/XML/INI (zumindest für die Entwicklungszeit) oder binär speichert. Es erlaubt dir mehr Flexibilität (Datenformat, Ablageort) und eine Separation (Spielweltdaten und Spieleinstellungen; erstere Gruppe könnte bei Bedarf noch in weitere Dateien/Datenquellen zerlegt werden).

Für deine Spielerdaten könnte es demzufolge eine Datenklasse geben:

[Serializable]
public PlayerState
{
  public string SceneId { get; set; }

  public Vector3 Position { get; set; }
}

Laden und Speichern kann man via StreamReader / StreamWriter. Im folgenden Fall werden die Daten in JSON gesichert.

private string _dataLocation = Path.Combine(Application.persistentDataPath, "playerData.json");

public T Load<T>()
{
  using (var reader = new StreamReader(_dataLocation))
  {
    var data = reader.ReadToEnd();
    return JsonUtility.FromJson<T>(data);
  }
}

public void Save<T>(T data)
{
  using (var writer = new StreamWriter(_dataLocation))
  {
    var jsonData = JsonUtility.ToJson(data);
    writer.Write(jsonData);
  }
}