Unity如何显示Highscores 1-9?

时间:2016-08-03 08:20:53

标签: c# unity3d

我正在进行我的团结项目,并且我在PlayerPrefabs中保存了1-9的高分。我得到这样的话:

private SortedList<string, int> GetHighScores()
{
    SortedList<string, int> tempList = new SortedList<string, int>();

    for (int i = 1; i < 10; i++)
    {
        string tempName = "Highscore " + i;
        tempList.Add(tempName, PlayerPrefs.GetInt(tempName));
    }

    return tempList;
}

但是,如何以良好的方式显示它们? 我想我可以为每个高分创建一个文本对象,但这会产生很多游戏对象,看起来像个坏主意。

2 个答案:

答案 0 :(得分:1)

您应该使用Text组件而不是OnGUI()GUI类中的任何内容。

  

但是,如何以良好的方式显示它们?我想我可以创造   每个高分的1个文本对象,但这会产生很多   游戏对象,似乎是一个坏主意。

对象池在这里可以很好,但是,由于需要9文本,只需创建Texts的数组。如果要显示高分,请通过调用GetHighScores()函数加载分数,然后遍历Texts数组并将结果存储到它们中。然后,您可以将Text.enabled设置为true以显示Texts

要隐藏分数,请在Text数组上进行简单循环,然后将每个分数设置为空字符串,然后将Text.enabled设置为false

脚本deblow实现了我上面所说的。只需从编辑器创建9个文本,将高分评分大小更改为9,然后按顺序将每个Text拖到元素插槽中。

public Text[] highScores;

public void hideHighScore()
{
    for (int i = 0; i < 9; i++)
    {
        highScores[i].text = "";
        highScores[i].enabled = false;
    }
}

public void showHighScore()
{
    SortedList<string, int> hScores = GetHighScores();
    for (int i = 0; i < 9; i++)
    {
        string tempName = "Highscore " + (i + 1);
        highScores[i].text = hScores[tempName].ToString();
        highScores[i].enabled = true;
    }
}

private SortedList<string, int> GetHighScores()
{
    SortedList<string, int> tempList = new SortedList<string, int>();

    for (int i = 1; i < 10; i++)
    {
        string tempName = "Highscore " + i;
        tempList.Add(tempName, PlayerPrefs.GetInt(tempName));
    }
    return tempList;
}

由于您知道需要存储的数据量为9,因此没有理由使用SortedListList。您可以使用数组,并防止在使用SortedList时执行不必要的内存分配。

答案 1 :(得分:0)

对于初学者来说,9个文本对象不是那么多,但你可以只做一个并且在不同的行上有值。

您还可以使用GUI显示值。

int s1 = 43, s2 = 32;

void OnGUI() {

    GUI.Label(new Rect(20, 20, 100, 500), "Score 1: "+s1+"\n Score 2: "+ s2);

}

你也可以创建一个记分牌,例如你在战地和使命召唤中按住TAB并启用/禁用它。