我正在努力制作一个记分牌,但只适合一个玩家。我想把我最好的10分保存到棋盘上,并显示在主菜单上。到目前为止,我只知道如何保存和显示一个结果。代码如下:
[SerializeField] private int score;
void Update()
{
if (score > PlayerPrefs.GetInt("highestScore"))
{
PlayerPrefs.SetInt("highestScore", score);
}
}
我在主菜单场景中显示如下
void Start()
{
highScore.text = PlayerPrefs.GetInt("highestScore").ToString();
}
如果你能帮我保存我最近的10个最好成绩并展示出来吗?我找不到任何关于如何做到这一点的教程。我想我应该使用Ints数组并循环该数组,然后将其保存到PlayerPrefs,但我不知道如何做到这一点。希望你能帮助我,并提前感谢你!!
您可以使用ArrayPrefs2作为数组进行存储(http://wiki.unity3d.com/index.php/ArrayPrefs2),然后使用更新
static void UpdateHighScores(int newScore)
{
var highScores = PlayerPrefsX.GetIntArray("highScores");
if (newScore > highScores[0]) {
highScores[0] = newScore;
Array.Sort(highScores);
PlayerPrefsX.SetIntArray("highScores", highScores);
}
}
在其他地方用初始化PlayerPrefs密钥"highScores"
之后
PlayerPrefsX.SetIntArray("highScores", new Array[10]);
请注意,这将生成一个数组,该数组中的最低高分位于第一位,真正的最高分位于最后一位。
您肯定可以保存更多的密钥,播放器首选项取参数一个是键,另一个是值你可以像一样设置它
PlayerPrefs.SetInt("highScore_1", value);
PlayerPrefs.SetInt("highScore_2", value);
PlayerPrefs.SetInt("highScore_3", value);
PlayerPrefs.SetInt("highScore_4", value);
PlayerPrefs.SetInt("highScore_5", value);
因此,当某个人的得分超过了之前的最高得分时,你要做的就是
int newScore = 50;
for(int i=1; i <= 5; i++){
if(newScore > PlayerPrefs.GetInt("highScore_"+i)){
for(int x = 5; x > i; x--){
int value = PlayerPrefs.GetInt("highScore_"+(x-1));
PlayerPrefs.setInt("highScore_"+x, value);
}
break;
}
}
如果有效,请告诉我。