我正在进行我的团结项目,并且我在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;
}
但是,如何以良好的方式显示它们? 我想我可以为每个高分创建一个文本对象,但这会产生很多游戏对象,看起来像个坏主意。
答案 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,因此没有理由使用SortedList
或List
。您可以使用数组,并防止在使用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并启用/禁用它。