如何保存球员的高分?吸气剂和制定者最好的方式?

时间:2014-07-03 13:32:06

标签: c# unity3d

问题:现在我的得分有效,我需要保存球员的高分。如果他们得到一个新的高分,那么它将需要用他们的新分数替换它。

问题:如何设置这些getter和setter以保存并将高分传递给最终场景?

补充:我已经为我的分数设置了一个实例,这是我遇到问题的时候,因为我开始出错。

场景1的代码:

public class Score : MonoBehaviour
{

public static Score instance { get; private set;}
public static int score = 0;

void Awake ()
{
    score = 0;
    InvokeRepeating("increaseScore", 1, 1);

}


public void Update ()
{
    score++;
    // Set the score text.
    guiText.text = "Score: " + score;
    instance = this;

}

}

结束场景代码:

public class endScore : MonoBehaviour {

// Use this for initialization
void Update () {

    // Set the score text.
    guiText.text = "Score: " + Score.score;

}


}

2 个答案:

答案 0 :(得分:0)

您可以使用PlayerPrefs存储高于当前会话的高分。如果你只是想使用静态变量存储当前会话的分数会起作用,但我想你会希望保持下一个会话的高分。

我的建议是在进入下一个场景时设置高分。

void OnGameEnd()
{
    ScoreManager.TrySetHighScore(Score.CurrentScore);
    Application.LoadLevel("ResultScreen"); 
}

以上只是为了证明您可以从存储的任何位置获得分数,并将其传递给分数管理器以设置高分。 ScoreManger类将包含维持高分的逻辑。

public class ScoreManager
{
    public static int GetHighScore()
    {
        return PlayerPrefs.GetInt("HighScore");
    }

    // Will set the score as the high score if it is the new high score
    public static int TrySetHighScore(int score)
    {
         PlayerPrefs.SetInt("HighScore", Mathf.Max(GetHighScore(), score);
    }
}

答案 1 :(得分:0)

保存只需要调用此

PlayerPrefs.SetFloat(levelText, highscore);

leveltext =是文件名或存储名称,只是一个标识符,所以统一知道你安全的数据名称是什么,在这种方法中我只使用级别名称。

highscore =是它自己的数据,在这种方法中我使用float,所以还有SetInt和SetString。

并加载数据

savedHighscore = PlayerPrefs.GetFloat(levelText);

savedhighscore =是已加载数据的变量。

为了更好的练习,最好这样做

if (PlayerPrefs.HasKey(levelText))
{
    savedHighscore = PlayerPrefs.GetFloat(levelText);
}
else
{
    savedHighscore = 0;
}