uumli Geschrieben 11. April 2017 Melden Share Geschrieben 11. April 2017 Hi Leute, ich habe damals einen Tipp bekommen, wie man Level durch Speicherpunkte speichern kann. Ich benötige das gleiche gerade für ein 3D-Projekt, in Unity. Ich habe ein Script, dass ich an ein Objekt in der Scene vergebe, wodurch ein "SavePoint" generiert, bzw. überschrieben wird. Diesen möchte ich nun über ein TriggerObjekt abrufen. Wenn etwas dieses TriggerObjekt berührt, wird entweder eine vorgegebene Szene geladen oder wenn die Szene einen geringeren Wert als "SavePoint" hat, der jeweilige höchste "SavePoint" geladen. Ich zeige das einmal anhand der Scripte: using UnityEngine; using System.Collections; public class Load_Savepoint : MonoBehaviour{ [SerializeField] private int level; void Start() { var lastSavedLevel = PlayerPrefs.GetInt("savepoint"); if(level > lastSavedLevel) { PlayerPrefs.SetInt("savepoint", level); } } } Dieses Script erstellt einen "SavePoint" oder überschreibt den vorherigen. Er bekommt einen Wert, den ich gleichsetze, mit der Reihenfolge der Scenen im Build. Also Scene 1, bekommt den Wert 1. using UnityEngine; using System.Collections; public class LoadSavepointOrLevel : MonoBehaviour { public string levelSelect; void OnTriggerEnter(Collider other) { Application.LoadLevel(PlayerPrefs.GetInt("savepoint")); } [SerializeField] private int level; void Start() { var lastSavedLevel = PlayerPrefs.GetInt("savepoint"); if(level > lastSavedLevel) { Application.LoadLevel(levelSelect); } } } Dieses Script, ist an das TriggerObjekt gebunden. Wird OnTriggerEnter ausgelöst, läd die vorgegebene Szene (levelSelect) oder halt der SavePoint, sollte dieser einen höheren Wert haben. Das Problem, es funktioniert nicht richtig. Es wird immer die 4. Scene im Build geladen, obwohl diese nichtmal einen "SavePoint" hat. Sieht jemand den Fehler? Bin noch ein ziemlicher Anfänger Danke für die Hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 11. April 2017 Melden Share Geschrieben 11. April 2017 Mhh so richtig kann ich die Skripte nicht entwirren aber, der OnTriggerEnter läd immer den letzten "savepoint" aus den PlayerPrefs, egal wie "levelSelect" gesetzt ist. Hier müsste die eigentlich Prüfung lastSavedLevel vs "LevelSelect" hinein ich verstehe nicht, warum "level" vom Außen gesetzt wird (in der Klasse selbst wird er nicht gesetzt), da die Levelvorgabe ja von "levelSelect" kommen soll? die Start()-Methode läd hier ein Level, obwohl du das Laden des Levels ja dem Trigger überlassen wolltest? du solltest die PlayerPref mit einem Defaultwert aufrufen und diesen Auswerten, damit du erkennst, wenn es noch keinen Speicherwert gibt.. der Defaultwert ist 0, aber diesen solltest du vielleicht auf -1 setzen, weil 0 ja auch ein Levelindex sein kann: public static int GetInt(string key, int defaultValue = 0); Ich vermute dein Levelindex steht auf 3 und daher wird bei Start immer Level 4 geladen!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.