Jump to content
Unity Insider Forum

PlayerPrefs und Bool wird nicht gespeichert


Tiborius

Recommended Posts

Hi

ich steh gerade richtig auf den schlauch.

Ich habe einmal den Code für Audio Mute

public int toggleSave = 1;

    public GameObject audioStart;
    public GameObject audioSpiel;

    public Toggle audioMute;

    public bool audioToggle = true;

    private void Start()
    {
        if (PlayerPrefs.HasKey("AudioSpeichern"))
        {
            toggleSave = PlayerPrefs.GetInt("AudioSpeichern");
        }

        if ( toggleSave == 0)
        {
            audioMute.isOn = true;
            audioSpiel.SetActive(false);
            audioStart.SetActive(false);
        }
        else
        {
            audioMute.isOn = false;
            audioSpiel.SetActive(true);
            audioStart.SetActive(true);
        }
    }

    public void MuteAudio()
    {
        audioToggle = !audioToggle;

        if (audioToggle)
        {
            audioSpiel.SetActive(true);
            audioStart.SetActive(true);

            toggleSave = 1;
        }
        else
        {
            audioSpiel.SetActive(false);
            audioStart.SetActive(false);

            toggleSave = 0;
        }

        PlayerPrefs.SetInt("AudioSpeichern", toggleSave);
    }

Bei dem geht auch alles wie es soll. Dann habe ich aber das gleiche noch mal für den Google Play Service und da speichert er den Bool und den PlayerPrefs nicht.

Hier mal der Code

void Start ()
    {
        if (PlayerPrefs.HasKey("LoginSave"))
        {
            loginSave = PlayerPrefs.GetInt("LoginSave");
        }

        if (loginSave == 1)
        {
            toplistButton.SetActive(true);
            erfolgeButton.SetActive(true);
            gpsLogin.isOn = true;
        }
        else
        {
            toplistButton.SetActive(false);
            erfolgeButton.SetActive(false);
            gpsLogin.isOn = false;
        }
    }

    public void GooglePlayService()
    {
        loginToggle = !loginToggle;

        if (!loginToggle)
        {
            Social.localUser.Authenticate((bool success) =>
            {
                if(success)
                {
                    toplistButton.SetActive(true);
                    erfolgeButton.SetActive(true);
                    textAnmeldeInfo.text = "Login success";
                    Invoke("TextLoeschen", 2);
                    loginSave = 1;
                }
                else
                {
                    loginToggle = !loginToggle;
                    gpsLogin.isOn = false;
                    textAnmeldeInfo.text = "Login fail";
                    Invoke("TextLoeschen", 2);
                    loginSave = 0;
                }
            });

            
        }
        else
        {
            PlayGamesPlatform.Instance.SignOut();

            loginSave = 0;
            toplistButton.SetActive(false);
            erfolgeButton.SetActive(false);
        }

        PlayerPrefs.SetInt("LoginSave", loginSave);
    }

Wenn ich das so schreibe dann speichert er den PlayerPrefs nicht und auch den Bool nicht. Wenn ich aber den mittleren Teil der anmeldung veränder dann geht es wieder.

Social.localUser.Authenticate((bool success) =>
            {
                toplistButton.SetActive(true);
                erfolgeButton.SetActive(true);
                textAnmeldeInfo.text = "Login success";
                Invoke("TextLoeschen", 2);
                loginSave = 1;
                
            });

Meine fragen sind jetzt, 

1. wie und wo speichert er den Bool

2. warum macht er es nur wenn ich den login ohne if und else schreibe?

 

Ich hoffe ihr könnt mich erleuchten weil ich gerade richtig verzweifel.

Danke

Gruß Tibor

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das liegt daran, dass du da eine Methode übergibst. Der relevante Teil ist

void Foo()
{
  Blub(() => print("eins"));
  print("zwei");
}

() => print("eins")

ist eine Methode, die du als Parameter in Blub reinschiebst. Einige Methoden nehmen ints, andere strings, und Blub, wie auch Authenticate nehmen eine Methode. Diese Methode können sie dann aufrufen, wann immer sie wollen. Wenn Blub() eine leere Methode wäre, dann würde die übergebene Methode nie ausgeführt werden, die "eins" landet also nie in der Konsole.

Authenticate führt die Methode früher oder später aus - und zwar, wenn das Authentifizieren abgeschlossen ist. Das dauert gerne mal etwas und deshalb läft der Rest des Programms weiter. In diesem Fall wird also print("zwei") ausgeführt, bevor Blub sich dazu entscheidet, die übergebene Methode auszuführen. "eins" landet so nach "zwei" in der Konsole.

Und genau das ist dein Problem - du führst SetInt aus, bevor deine int-Variable gesetzt wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...