Jump to content
Unity Insider Forum

PlayerPrefs werden nicht richtig gespeichert


Tom12

Recommended Posts

Hallo,

ich habe 2 Scenen, Shop und Clicker, wenn ich vom Clicker Scene in den Shop gehe werden meine Points übernommen, allerdings wenn ich vom Shop in das Clicker Scene zurückwechsle setzt sich alles auf 0 zurück

Clicker Script

public float Bananen;
    public float BananenPerClick = 1;
    public UnityEngine.UI.Text BananenDisplay;
    public UnityEngine.UI.Text PerClickDisplay;
 
 
    // Use this for initialization
    void Start () {
 
        if (!PlayerPrefs.HasKey("Bananen"))
        {
            Bananen = PlayerPrefs.GetFloat("Bananen");
        }
        if (!PlayerPrefs.HasKey("BananenPerClick"))
        {
            BananenPerClick = PlayerPrefs.GetFloat("BananenPerClick", 1);
        }
 
   
      public void Clicked()
      {
            Bananen = Bananen + BananenPerClick;
            PlayerPrefs.Save();
      }
 
    public void OnDestroy()
    {
        PlayerPrefs.SetFloat("Bananen", Bananen);
        PlayerPrefs.SetFloat("BananenPerClick", BananenPerClick);
    }

Shop Script

void Awake(){
        if (!PlayerPrefs.HasKey("Bananen"))
        {
            Bananen = PlayerPrefs.GetFloat("Bananen");
        }
        if (!PlayerPrefs.HasKey("BananenPerClick"))
        {
            BananenPerClick = PlayerPrefs.GetFloat("BananenPerClick", 1);
        }
        if (!PlayerPrefs.HasKey("Item1"))
        {
            Bananen = PlayerPrefs.GetFloat("Item1");
        }
        if (!PlayerPrefs.HasKey("PreisItem1"))
        {
            Bananen = PlayerPrefs.GetFloat("PreisItem1");
        }
}
 
void Update(){
          PlayerPrefs.Save();
}
 
    private void OnDestroy()
    {
        PlayerPrefs.SetFloat("Bananen", Bananen);
        PlayerPrefs.SetFloat("BananenPerClick", BananenPerClick);
        PlayerPrefs.SetFloat("Item1", Item1);
        PlayerPrefs.SetFloat("PreisItem1", PreisItem1);
    }

Seht Ihr irgendwo einen Fehler?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe jetzt echt nicht alle Dinge angesehen, aber gleich zu Beginn sagst du (frei übersetzt):

Wenn ich in den Playerpres keinen Schlüssel mit Namen Bananen habe,  dann nimm dir den Wert aus dem nicht vorhandenen Schlüssel Bananen und übergeb ihn der Variable Bananen.
Ja und so machst du weiter.
Überdenke das mal.

Außerdem speicherst du bei jedem Frame die Playerprefs. Das ist nicht das, was du machen willst, denn du willst bestimmt nicht, dass die Festplatte 60 Mal pro sekunde irgendwelche Werte speichert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 24.11.2018 um 20:02 schrieb malzbie:

Wenn ich in den Playerpres keinen Schlüssel mit Namen Bananen habe,  dann nimm dir den Wert aus dem nicht vorhandenen Schlüssel Bananen und übergeb ihn der Variable Bananen.

HasKey gibt laut UnityDoku einen True wert aus, also heißt es wenn Playerprefs einen Schlüssel Namens Bananen hat, lade ihn

Oder verstehe ich dass komplett falsch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist schon richtig. Es wird einfach in dem Bereich nach dem Schlüssel Banane gesucht und true ausgegeben, wenn er da ist oder eben false, wenn er nicht da ist.

Aber in deiner Abfrage steht

if (!PlayerPrefs.HasKey("Bananen"))

Mit einem ! vorneweg. Und ! bedeutet nicht

Deine Bedingung ist also erfüllt wenn es den Key Bananen NICHT gibt. Und dann willst du den Bananenwert auslesen.
Das ist aber doch nicht möglich! Denn wenn etwas nicht da ist, kannst du auch keinen Wert auslesen.

Du hast deinen Code komplett verdreht. Denn in der Awake fragst du ständig ab, ob die Keys NICHT da sind. Und wenn die nicht da sind willst du etwas auslesen. Anstatt die Keys überhaupt ersteinmal zu erzeugen.

Du hast den Code scheinbar irgendwie zusammengebastelt ohne genau zu verstehen wie man Playerprefs behandelt.

Ich hatte vor 4 Jahren mal ein kleines Texttutorial dazu geschrieben. Das solltest du dir mal anschauen:

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...