【问题标题】:Unity Display Highest 10 Scoresunity 显示最高 10 分
【发布时间】: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 但我不知道该怎么做。希望您能帮助我并提前感谢您!

【问题讨论】:

    标签: arrays unity3d save game-development


    【解决方案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 个文本字段。
    • 嘿,你介意再试一次吗,我已经对代码进行了更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2018-05-02
    • 2016-05-01
    相关资源
    最近更新 更多