GUI與GUILayout的區別——《Unity 3D遊戲開發》

出版圈郭志敏發表於2012-06-14

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所示,正常情況下兩個按鈕中的內容與按鈕的佈局完美適應。

enter image description here

點選按鈕來增加文字內容,效果如圖3-17所示,顯然使用GUILayout繪製的按鈕按照字串長度調整了按鈕長度,而使用GUI繪製的按鈕未能進行自適應調整。由於按鈕中的文字增長,而按鈕的長度不變,所以按鈕上的文字被擠在了中間。由此可以看出,使用GUI繪製的控制元件非常不靈活。

enter image description here

相關文章