2017-02-15 75 views
2

我遇到以下問題:我有一個釣魚遊戲。到目前爲止,如果我玩遊戲,我可以開始釣魚,釣到2,3,4多條魚,一切都很好。但是,如果我想暫停遊戲(按ESC或放置在場景中的按鈕),我的分數將重置。另外,即使我暫停遊戲或進入商店按鈕,我也不知道如何保存我的分數。如何在Unity中保存分數

啓動功能

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); 
} 

更新功能:

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

當您將分數保存到PlayerPrefs時,我看不到任何處理場景。 – TerNovi

+0

也許是因爲您沒有在任何地方設置「Pesti」的價值?另外你還沒有保存PlayerPrefs。 –

+0

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

回答

0

你應該有一個怎樣的一個GameManager類的,你把你需要在適當的attributes記住一切。當你開始遊戲時,你創建了一個GM的實例,並在遊戲邏輯中引用這個對象。像比分這樣的東西應該在GM中存儲和處理。這樣,您可以確保在遊戲存活時「保存」分數。

1

在你的更新方法中,嘗試在你正在檢測Escape Press的地方添加一些代碼。

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(); 
} 

好運

1

我覺得這是不保存/通過對Text.text直接做業務加載你的分數,以正確的方式。
如果你想保存和加載你的分數,請創建一個單獨的變量score來存儲你的分數,然後在你的UI元素中使用你的分數。
例如,這解釋瞭如何在運行時節省成績:

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; 
    } 
} 

並使用你的分數在你的UI類:

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(); 
    } 
} 

不要忘記using UnityEngine.UI,保存/載入得分以這種方式會容易得多。

通常情況下,當遊戲退出你不需要調用PlayerPrefs.Save()因爲數據將被自動寫入到磁盤(它在OnApplicationQuit()自動調用),但你可能要在某個點來調用它(即檢查站 )以防程序崩潰或其他意外情況。

+0

我還是不明白我該怎麼做。 –

+0

@StefanSmarandache你需要了解'PlayerPrefs'是如何工作的,'PlayerPrefs'用於存儲和訪問遊戲會話之間的玩家偏好。你可以在場景中存儲一個變量,給它一個鍵和一個值,然後用你提供的鍵訪問另一個場景中的值。你可以在這裏閱讀關於'PlayerPrefs'的文檔:(https://docs.unity3d.com/ScriptReference/PlayerPrefs.html) –