如何保存玩家的高分?getter和setter是最好的方法

本文关键字:getter setter 方法 何保存 保存 玩家 | 更新日期: 2023-09-27 18:11:14

问题:现在我有我的得分工作,我需要保存球员的高分。如果玩家获得了新的高分,那么游戏便需要将其替换为玩家的新分数。

问题:我如何设置这些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;
}

}

如何保存玩家的高分?getter和setter是最好的方法

您可以使用PlayerPrefs存储超过当前会话的高分。如果您只想使用静态变量存储当前会话的分数,则可以工作,但我认为您可能希望在下一个会话中保持高分。

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

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

以上只是为了演示您可以从存储的任何地方获取分数,并将其传递给分数管理器以设置最高分。scoremanager类将包含维护高分的逻辑。

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

保存你只需要调用这个

PlayerPrefs.SetFloat(levelText, highscore);

leveltext =是文件名或者存储名,只是一个标识符,这样我们就知道要保护的数据名称是什么,这里我只使用级别名。

hilicore =是它自己的数据,在这种方法中我使用float so,还有settint和SetString。

和加载数据

savedHighscore = PlayerPrefs.GetFloat(levelText);

savedhilicore =是加载数据的变量。

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

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