GUI與GUILayout的區別——《Unity 3D遊戲開發》
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所示,正常情況下兩個按鈕中的內容與按鈕的佈局完美適應。
點選按鈕來增加文字內容,效果如圖3-17所示,顯然使用GUILayout繪製的按鈕按照字串長度調整了按鈕長度,而使用GUI繪製的按鈕未能進行自適應調整。由於按鈕中的文字增長,而按鈕的長度不變,所以按鈕上的文字被擠在了中間。由此可以看出,使用GUI繪製的控制元件非常不靈活。
相關文章
- 讀《Unity 3D遊戲開發》Unity3D遊戲開發
- Unity 3D學習之《Unity 3D 手機遊戲開發》1Unity3D遊戲開發
- 《Unity 2D與3D手機遊戲開發實戰》簡介Unity3D遊戲開發
- 【Unity 3D遊戲開發】在Unity使用NoSQL資料庫方法介紹Unity3D遊戲開發SQL資料庫
- WEB與遊戲開發的一些區別Web遊戲開發
- 《Unity 3D 遊戲開發(第2版)》讀後感Unity3D遊戲開發
- 雨鬆MOMO與圖靈合作《Unity 3D遊戲開發》終於出版了圖靈Unity3D遊戲開發
- unity 區域網遊戲開發知識點Unity遊戲開發
- 如何用Unity GUI製作HUDUnityGUI
- 【Unity遊戲開發】SpriteAtlas與AssetBundle最佳食用方案Unity遊戲開發
- ??與?:的區別
- MySQL的@與@@區別MySql
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- &與&&, |與||區別
- 遊戲開發者:過半移動遊戲開發者使用Unity引擎遊戲開發Unity
- in與exist , not in與not exist 的區別
- Unity 3D 我來了Unity3D
- Unity 3D 打造自己的Mecanim Callback SystemUnity3D
- CentOS 與 Ubuntu 的區別CentOSUbuntu
- artice與section的區別
- GET 與 POST 的區別
- WebSocket 與 Socket 的區別Web
- Postgresql與MySQL的區別MySql
- chown與chmod的區別
- session與cookie的區別SessionCookie
- LESS與SASS的區別
- free 與 CFRelease 的區別
- gulp與webpack的區別Web
- @Autowired 與@Resource的區別
- let與var的區別
- post與get的區別
- HashSet與HashMap的區別HashMap
- maven與ant的區別Maven
- __new()__ 與 __init()__的區別
- TCP與UDP的區別TCPUDP
- Mysql與mongodb的區別MySqlMongoDB
- typedef與define的區別