问题:现在我的得分有效,我需要保存球员的高分。如果他们得到一个新的高分,那么它将需要用他们的新分数替换它。
问题:如何设置这些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;
}
}
答案 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;
}