i OS游戏开发引擎:GUI与GUILayout的区别

GUILayout是什么东西呢?它是游戏界面的布局。从命名中就可以看到这两个东西非常相像,但是在使用过程中两者还是存在一定区别的。
使用GUI绘制控件的时候,需要设置控件的Rect()方法,也就是说需要设定控件的整体显示区域。这样设置的控件非常不灵活,因为它的坐标以及大小已经固定死了,这时如果控件中的内容长度发生改变,就会直接影响展示效果。例如,在界面中绘制一个按钮时,按钮中的显示文本刚好填充在整个按钮当中,如果动态加长文本的显示长度,就会超出按钮的显示范围,使按钮控件变得不伦不类。我们需要制作控件的自适应,所以不能使用Rect()方法固定控件的显示区域,而是需要使用界面布局来制作界面。
使用GUILayout来制作界面,可以很方便地为我们解决上述难题。使用GUI制作界面的时候,需要给每一个控件设定显示区域,如果控件的显示坐标没有计算准确,还会出现控件重叠的情况,而GUILayout无须设定显示区域,系统会自动帮我们计算控件的显示区域,并且保证它们不会重叠。

大部分GUI控件都可以使用GUILayout进行绘制。

下面我们将通过一个实例让读者进一步熟悉GUI与GUILayout之间的区别。本例使用GUI与GUILayout分别制作两个按钮,然后动态修改按钮中的文字,看看这两个按钮有什么不同的变化,具体代码如代码清单3-11所示。
var addStr : String = "添加测试字符串";
function OnGUI()
{
if(GUI.Button (Rect (50,50,100,30), addStr))
{
addStr +=addStr;
}
if(GUILayout.Button (addStr))
{
addStr +=addStr;
}
}

在上述代码中,点击任意按钮,按钮中的文本长度将增加。如图3-16所示,正常情况下两个按钮中的内容与按钮的布局完美适应。
GUI与GUILayout的区别
点击按钮来增加文本内容,效果如图3-17所示,显然使用GUILayout绘制的按钮按照字符串长度调整了按钮长度,而使用GUI绘制的按钮未能进行自适应调整。由于按钮中的文字增长,而按钮的长度不变,所以按钮上的文字被挤在了中间。由此可以看出,使用GUI绘制的控件非常不灵活。
GUI与GUILayout的区别