unity 显示最高 10 分
Posted
技术标签:
【中文标题】unity 显示最高 10 分【英文标题】:Unity Display Highest 10 Scores 【发布时间】:2020-09-18 18:12:05 【问题描述】:我正在尝试像记分牌一样制作,但只针对单个玩家。我想将我最好的 10 个分数保存到板上并将其显示到 MainMenu。到目前为止,我知道如何只保存和显示一个结果。代码如下:
[SerializeField] private int score;
void Update()
if (score > PlayerPrefs.GetInt("highestScore"))
PlayerPrefs.SetInt("highestScore", score);
我在 MainMenu 场景中显示如下
void Start()
highScore.text = PlayerPrefs.GetInt("highestScore").ToString();
能否帮我保存我最近的 10 个最好成绩并显示出来?我找不到任何关于如何做到这一点的教程。我想我应该是 Ints 数组并循环遍历该数组,然后将其保存到 PlayerPrefs 但我不知道该怎么做。希望您能帮助我并提前感谢您!
【问题讨论】:
【参考方案1】:您可以使用 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]);
请注意,这会首先生成一个具有最低高分的数组,最后才是真正的最高分。
【讨论】:
我也会评论 Hamza Abbas 的回答,但我还没有任何声誉。他们忘记在 if 语句的末尾添加break;
。
嘿,谢谢你指出这个错误,我没有尝试运行代码,而是假设它会如何工作来编写它,谢谢。
还有一个错误,forloop 条件是检查 X 是否小于 I,所以如果 I = 3 并且 X 从 5 开始(X
没问题。我认为您还需要将"highScore_"x-1
更改为"highScore_"+(x-1)
。虽然如果 OP 让您的代码运行,他们一定已经注意到了。
lmao,编辑了答案,我还有什么遗漏吗? XD【参考方案2】:
你绝对可以节省更多的钥匙, 播放器首选项 接受参数一个是键,第二个是值 你可以像这样设置它
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;
让我知道它是否有效。
【讨论】:
您好,谢谢您的回答!不幸的是,它似乎没有工作,或者我在尝试实现它时做错了。当我如上所述设置 PlayerPrefs 时,它将最高分返回到所有 5 个文本字段。 嘿,你介意再试一次吗,我已经对代码进行了更正。以上是关于unity 显示最高 10 分的主要内容,如果未能解决你的问题,请参考以下文章