GUI与GUILayout的区别

GUILayout是什么东西呢?它是游戏界面的布局。从命名中就可以看到这两个东西非常相像,但是在使用过程中两者还是存在一定区别的。

使用GUI绘制控件的时候,需要设置控件的Rect()方法,也就是说需要设定控件的整体显示区域。这样设置的控件非常不灵活,因为它的坐标以及大小已经固定死了,这时如果控件中的内容长度发生改变,就会直接影响展示效果。例如,在界面中绘制一个按钮时,按钮中的显示文本刚好填充在整个按钮当中,如果动态加长文本的显示长度,就会超出按钮的显示范围,使按钮控件变得不伦不类。我们需要制作控件的自适应,所以不能使用Rect()方法固定控件的显示区域,而是需要使用界面布局来制作界面。

使用GUILayout来制作界面,可以很方便地为我们解决上述难题。使用GUI制作界面的时候,需要给每一个控件设定显示区域,如果控件的显示坐标没有计算准确,还会出现控件重叠的情况,而GUILayout无须设定显示区域,系统会自动帮我们计算控件的显示区域,并且保证它们不会重叠。

注意 之前介绍的大部分GUI控件都可以使用GUILayout进行绘制。

下面我们将通过一个实例让读者进一步熟悉GUI与GUILayout之间的区别。本例使用GUI与GUILayout分别制作两个按钮,然后动态修改按钮中的文字,看看这两个按钮有什么不同的变化,具体代码如代码清单3-11所示。

代码清单3-11 Script_03_11.js文件

var addStr : String = "添加测试字符串"; function OnGUI() { //普通GUI按钮 if(GUI.Button (Rect (50,50,100,30), addStr)) { addStr +=addStr; } //界面布局按钮 if(GUILayout.Button (addStr)) { addStr +=addStr; } }

在上述代码中,点击任意按钮,按钮中的文本长度将增加。如图3-16所示,正常情况下两个按钮中的内容与按钮的布局完美适应。

GUI与GUILayout的区别_第1张图片

点击按钮来增加文本内容,效果如图3-17所示,显然使用GUILayout绘制的按钮按照字符串长度调整了按钮长度,而使用GUI绘制的按钮未能进行自适应调整。由于按钮中的文字增长,而按钮的长度不变,所以按钮上的文字被挤在了中间。由此可以看出,使用GUI绘制的控件非常不灵活。

GUI与GUILayout的区别_第2张图片

你可能感兴趣的:(GUI与GUILayout的区别)