2017-02-15 3 views
2

Ich bin mit dem folgenden Problem fest: Ich habe ein Angelspiel. Bis jetzt, wenn ich das Spiel spiele, kann ich anfangen zu angeln, 2,3,4 mehr Fische fangen und alles ist in Ordnung.So speichern Sie die Punkte in Unity

Wenn ich jedoch das Spiel pausieren möchte (Drücken von ESC oder eine Taste, die ich in der Szene platziert habe) wird mein Ergebnis zurückgesetzt. Außerdem weiß ich nicht, wie ich meine Punktzahl speichern kann, auch wenn ich das Spiel pausiere oder in den Shop-Button gehe.

Start-Funktion

void Start() 
{ 
    PlayerPrefs.GetInt("Pesti"); 
    NrPesti.text = PlayerPrefs.GetInt("Pesti").ToString(); 

    PlayerPrefs.GetInt("Viermisori"); 
    NrViermisori.text = PlayerPrefs.GetInt("Viermisori").ToString(); 

    PlayerPrefs.GetInt("Score"); 
    Score.text = PlayerPrefs.GetInt("Score").ToString(); 

    PlaySound(0); 
} 

Update-Funktion:

void Update() 
{ 
    Debug.Log(NrViermisori.text); 
    Debug.Log(NrPesti.text); 
    Debug.Log(Score.text); 
    if (NrPesti.name =="Pesti") 
    { 
     NrPesti.text = "Lovers: " + NrPesti.text; 
    } 
    PlayerPrefs.SetString("NrPesti", NrPesti.text); 
    if(NrViermisori.name == "Viermisori") 
    { 

     NrViermisori.text = "Beasts: " + NrViermisori.text; 
    } 
    PlayerPrefs.SetString("Viermisori", NrViermisori.text); 


    if (Input.GetKeyDown(KeyCode.Escape)) Application.Quit(); 

} 
+0

Ich sehe nichts, um das Szenario zu behandeln, wenn Sie den Score in PlayerPrefs speichern. – TerNovi

+0

Vielleicht, weil Sie den Wert von 'Pesti' nirgendwo einstellen? Außerdem speichern Sie die PlayerPrefs nicht. –

+0

https://docs.unity3d.com/ScriptReference/PlayerPrefs.Save.html – Maakep

Antwort

0

Sie sollten eine Art von GameManager Klasse, wo Sie alles, was Sie in den entsprechenden attributes merken müssen speichern. Wenn Sie das Spiel starten, erstellen Sie eine Instanz des GM und verweisen auf dieses Objekt in der Spiellogik. Dinge wie der Score sollten innerhalb des GM gespeichert und verarbeitet werden. Auf diese Weise können Sie sicherstellen, dass Ihre Punktzahl während des Spiels gespeichert wird.

1

In Ihrer Update-Methode versuchen Sie etwas zu Ihrem Code hinzufügen, wo Sie Escape Press erkennen.

if (Input.GetKeyDown(KeyCode.Escape)){ 
    PlayerPrefs.setInt("Score", Int32.Parse(Score.text)); 
    //Verify property is saved 
    Int scoreTest = PlayerPrefs.getInt("Score"); 
    Debug.Log(scoreTest); 
    Application.Quit(); 
} 

Good Luck

1

Ich denke, das nicht der richtige Weg, um Ihre Punkte zu speichern/laden, indem Sie Operationen auf die Text.text direkt zu tun.
Wenn Sie Ihre Partitur speichern und laden möchten, erstellen Sie eine separate Variable score, um Ihre Partitur zu speichern, und verwenden Sie dann Ihre Partitur in Ihren UI-Elementen.
Zum Beispiel erklärt dies, wie Sie Partituren zur Laufzeit sparen:

public class Score: MonoBehaviour { 

    public int score = 0; 

    // Use this for initialization 
    void Start() { 
     // get the score when this gameObject initialized 
     score = PlayerPrefs.GetInt("Player Score"); 
    } 

    // Update is called once per frame 
    void Update() { 
     // this is how you set your score to PlayerPrefs 
     if (Input.GetKeyDown(KeyCode.Escape)) { 
      PlayerPrefs.SetInt("Player Score", score); 
     } 
    } 

    // this is an public function to be used 
    // outside of the class to update score 
    public void UpdateScore(int amount) { 
     score += amount; 
    } 
} 

Und Ihre Punktzahl in Ihrem UI-Klasse verwenden:

public class DisplayScore : MonoBehaviour { 

    public Text scoreText; 
    public Score playerScore; 

    // Use this for initialization 
    void Start() { 
     // get your Score component here or just drag it in inspector 
    } 

    // Update is called once per frame 
    void Update() { 
     // this updates the score at every frame 
     scoreText.text = playerScore.score.ToString(); 
    } 
} 

do using UnityEngine.UI nicht vergessen, Speichern/Laden-Score auf diese Weise wird viel einfacher sein.

Normalerweise brauchen Sie nicht PlayerPrefs.Save() zu nennen, da werden die Daten automatisch auf die Festplatte geschrieben werden, wenn das Spiel beendet (es ruft automatisch in OnApplicationQuit()), aber man kann es an einem bestimmten Punkt nennen wollen (dh Checkpoints) bei Programmabstürzen oder anderen unerwarteten Situationen.

+0

Ich verstehe immer noch nicht, wie ich es tun kann. –

+0

@StefanSmarandache müssen Sie verstehen, wie 'PlayerPrefs' funktioniert,' PlayerPrefs', die Spielereinstellungen zwischen Spielsitzungen speichert und darauf zugreift. Sie können eine Variable in einer Szene speichern, indem Sie ihr einen Schlüssel und einen Wert zuweisen und auf den Wert in einer anderen Szene mit dem angegebenen Schlüssel zugreifen. Sie können die Dokumentation zu 'PlayerPrefs' hier lesen: (https://docs.unity3d.com/ScriptReference/PlayerPrefs.html) –

Verwandte Themen