用foreach循环改变gui的位置

时间:2017-09-07 04:21:42

标签: c# unity3d foreach rect

所以我正在编写一个分数列表,并希望所有分数都列在GUI中。 我有string[]所有分数,所以我使用了

foreach(string score in scores) { 
y = y + 60f;
GUI.Label(new Rect(0, y, 100, 20), score); 
}

但现在每个GUI.label都会被移动,而不仅仅是新的。因此,如果它以第3分为例,则每个对象都在180f。

1 个答案:

答案 0 :(得分:1)

使用Text组件在屏幕上显示文字。避免任何需要GUI.LabelOnGUI功能的内容。您可以了解有关Unity的用户界面here的更多信息。

要回答您的问题,您可以使用多个 Text组件,在Horizontal Layout GroupLayout Element的帮助下显示字符串数组中的每个值组件。你可以通过Google搜索来了解这些工作方式。

OR

您还可以将一个 Text组件与“\r\n”组合使用,然后将所有字符串连接并显示到该Text组件。 “\r\n”用于将每个文本移动到新行。

public Text textScore;
public string[] scores;

void Start()
{
    textScore.horizontalOverflow = HorizontalWrapMode.Overflow;
    textScore.verticalOverflow = VerticalWrapMode.Overflow;


    foreach (string score in scores)
    {
        //Add new Score
        textScore.text = textScore.text + score;
        //Add new Line
        textScore.text = textScore.text + "\r\n";

        //OR (Do both one one line)
        //textScore.text = textScore.text + score + "\r\n";
    }
}

如果您希望每个文本之间有更多空格,则可以在每个循环中添加任意数量的“\r\n”。例如,textScore.text = textScore.text + score + "\r\n\r\n\r\n\r\n\r\n\r\n";