如何在Unity中保存分数

时间:2017-02-15 15:03:03

标签: c# android unity3d unity5

我遇到了以下问题:我有一个钓鱼游戏。到目前为止,如果我玩游戏,我可以开始钓鱼,捕获2,3,4多条鱼,一切都很好。

但是,如果我想暂停游戏(按下ESC或我放置在场景中的按钮),我的分数会重置。另外,即使我暂停游戏或进入商店按钮,我也不知道如何保存我的分数。

启动功能

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

}

3 个答案:

答案 0 :(得分: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 :(得分:1)

我认为这不是通过直接对span { display: inline-block; } 进行操作来保存/加载分数的正确方法。
如果您想保存并加载您的分数,请创建一个单独的变量Text.text来存储您的分数,然后在您的UI元素中使用您的分数。
例如,这解释了如何在运行时保存分数:

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

不要忘记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()中自动调用),但您可能需要在在程序崩溃或其他意外情况下,某些点(即检查点)。

答案 2 :(得分:0)

您应该有一种GameManager课程,您可以在适当的attributes中存储您需要记住的所有内容。当您启动游戏时,您将创建GM的实例并在游戏逻辑中引用此对象。像分数这样的东西应该在GM中存储和处理。这样你就可以确保在比赛还活着时“保存”你的分数。