unity3D游戏开发之GUI
轉:http://blog.csdn.net/kuloveyouwei/article/details/23598171
GUI在游戲的開發中占有重要的地位,游戲的GUI是否友好,使用是否方便,很大程度上決定了玩家的游戲體驗。Unity內置了一套完整地GUI系統,提供了從布局、控件到皮膚的一整套GUI解決方案,可以做出各種風格和樣式的GUI界面。在Unity中使用GUI來完成GUI的繪制工作,目前Unity沒有提供內置的GUI可視化編輯器,因此GUI界面的制作需要全部通過編寫腳本代碼來實現,如果游戲有比較多的界面制作需求,可以通過編寫編輯器腳本來制作適合自身需求的GUI編輯器,或者借助第三方的GUI插件,如NGUI。
Unity的GUI類提供了豐富的界面控件,可以將這些控件配合使用,GUI控件,如下圖:
GUI代碼需要在OnGUI函數中調用才能繪制,GUI的控件一般都需要傳人Rect參數來指定屏幕繪制區域,例如Rect(0,10,200,300),對應的屏幕矩形區域左上角的坐標為(0,10),寬度為200,高度為300,在Unity GUI中,屏幕坐標系以左上角為原點
接下來我們看Label控件,Label控件適合用來顯示文本信息或者圖片,我們新建一個c#腳本,叫做TestGUI.cs,然后綁定到我們的Main Camera對象上,Label初始化代碼如下:
[csharp]view plaincopy
voidOnGUI()
{
//GUI.color=Color.red;
GUI.Label(newRect(10,10,100,200),"HelloWorld!");
GUI.Label(newRect(100,100,texture.width/4,texture.height/4),texture);
}
我們定于了兩個label,一個顯示文字,另一個顯示了一張圖片,如下圖:
Box控件,Box控件用來繪制帶有邊框背景的文字或圖片,代碼如下:
[csharp]view plaincopy
voidOnGUI()
{
//GUI.color=Color.red;
//GUI.Label(newRect(10,10,100,200),"HelloWorld!");
//GUI.Label(newRect(100,100,texture.width/4,texture.height/4),texture);
GUI.Box(newRect(10,10,Screen.width*0.5f,Screen.height*0.5f),"Thisisatitle");
GUI.Box(newRect(150,170,texture.width/4,texture.height/4),texture);
}
效果如下:
Button控件,Button控件用來繪制響應單擊事件的按鈕,代碼如下:
[csharp]view plaincopy
GUI.Button(newRect(10,10,150,50),"這是一個文字按鈕");
//圖片按鈕
GUI.Button(newRect(150,100,texture.width/4,texture.height/4),texture);
效果如下圖:
繪制一個文字圖片的按鈕,代碼如下:
[csharp]view plaincopy
//繪制一個帶圖片和文字按鈕
GUIContentguic=newGUIContent("按鈕",texture);
GUI.Button(newRect(10,70,150,30),guic);
我們可以設置按鈕的點擊事件,代碼如下:
[csharp]view plaincopy
GUI.Button(newRect(10,10,150,50),"這是一個文字按鈕");
//圖片按鈕
if(GUI.Button(newRect(150,100,texture.width/4,texture.height/4),texture))
{
Debug.Log("--------aaa");
}
//繪制一個帶圖片和文字按鈕
GUIContentguic=newGUIContent("按鈕",texture);
GUI.Button(newRect(10,70,150,30),guic);
當我們點擊了按鈕,就會在控制臺輸出打印的內容,
TextField控件,在游戲中,經常需要用到信息輸入的窗口,比如聊天窗、用戶信息的輸入等;PasswordField控件用于繪制密碼輸入框,經常用于用戶登錄界面中;TextArea控件與TextField的用法類似,區別就是TextField是單行的,TextArea可以編輯多行的文字,創建的代碼如下:
[csharp]view plaincopy
usingUnityEngine;
usingSystem.Collections;
publicclassTestGUI:MonoBehaviour{
publicTexture2Dtexture;
publicstringuserName;
publicstringpassword;
publicboolisSuccess;
//Usethisforinitialization
voidStart()
{
userName="admin";
password="123";
}
//Updateiscalledonceperframe
voidUpdate(){
}
voidOnGUI()
{
//GUI.color=Color.red;
//GUI.Label(newRect(10,10,100,200),"HelloWorld!");
//GUI.Label(newRect(100,100,texture.width/4,texture.height/4),texture);
//GUI.Box(newRect(10,10,Screen.width*0.5f,Screen.height*0.5f),"Thisisatitle");
//GUI.Box(newRect(150,170,texture.width/4,texture.height/4),texture);
//GUI.Button(newRect(10,10,150,50),"這是一個文字按鈕");
////圖片按鈕
//if(GUI.Button(newRect(150,100,texture.width/4,texture.height/4),texture))
//{
//Debug.Log("--------aaa");
//
//
//}
//
////繪制一個帶圖片和文字按鈕
//GUIContentguic=newGUIContent("按鈕",texture);
//GUI.Button(newRect(10,70,150,30),guic);
userName=GUI.TextField(newRect(10,10,150,30),userName);
//'*'密碼字符串的掩碼字符
password=GUI.PasswordField(newRect(10,50,150,30),password,'*',25);
GUI.TextArea(newRect(10,100,150,50),"abcderfasdasdasdasfasdaasdfdfsfsd");
if(GUI.Button(newRect(Screen.width/2-50,Screen.height/2-50,100,100),"登錄"))
{
//判斷登錄
if(userName.Equals("admin")&&password.Equals("123"))
{
isSuccess=true;
}
else
{
isSuccess=false;
}
}
if(isSuccess)
{
GUI.Label(newRect(10,200,100,30),"登錄成功!");
}else
{
GUI.Label(newRect(10,200,100,30),"登錄失敗!");
}
}
}
效果如下:
Toggle控件可以用于制作開關按鈕,每次單擊,它都會在開和關的狀態之間切換,創建代碼如下:
[csharp]view plaincopy
//文字
toggleTxt=GUI.Toggle(newRect(10,10,100,30),toggleTxt,"AToggletext");
//圖片
toggleImg=GUI.Toggle(newRect(10,50,50,50),toggleImg,texture);
效果如下圖:
ToolBar控件適用于繪制一組按鈕,在這些按鈕中同時只激活一個,可以用來制作工具欄,創建代碼如下:
[csharp]view plaincopy
publicinttoolbarInt;
toolbarInt=GUI.Toolbar(newRect(10,10,250,30),toolbarInt,newstring[]{"功能一","功能二","功能三"
});
效果如下圖:
Silder滑動條是一種很常用的界面元素,可用在音量調整、進度顯示、數值調整的GUI界面中,在Unity中Slider控件分為水平和垂直2種,對應的GUI函數為HorizontalSlider和VerticalSlider,創建代碼如下:
[csharp]view plaincopy
hSliderValue=GUI.HorizontalSlider(newRect(50,25,100,30),hSliderValue,0.0f,10.0f);
//顯示水平滑動條數值
GUI.Label(newRect(25,22,100,30),hSliderValue.ToString("0.00"));
vSliderVaule=GUI.VerticalSlider(newRect(25,70,30,100),vSliderVaule,0.0f,10.0f);
//顯示垂直滑動條數值
GUI.Label(newRect(22,170,100,30),vSliderVaule.ToString("0.00"));
效果如下圖:
Scrollbar控件,滾動條Scrollbar常用于頁面區域的滾動,例如文檔瀏覽中,在Unity中Scrollbar控件分為水平和垂直2種,對應的GUI函數為HorizontalScrollbar和VerticalScrollbar,創建代碼如下:
[csharp]view plaincopy
hSbarValue=GUI.HorizontalScrollbar(newRect(25,25,100,30),hSbarValue,1.0f,0.0f,10.0f);
vSbarVaule=GUI.VerticalScrollbar(newRect(25,50,30,100),vSbarVaule,1.0f,10.0f,0.0f);
效果如下圖:
Unity默認的控件外觀十分簡單,在游戲開發過程中,開發者都會根據游戲的類型和內容來設計一套個性化的游戲界面,Unity可以通過配置GUISkin來更改控件的默認樣式,制作出符合游戲風格的控件外觀。依次打開菜單欄中的Assets->Create->GUI Skin來創建GUISkin,如下圖:
單擊GUISkin文件,在Inspector視圖中可以對GUISkin的參數進行設置,假設現在需要更換按鈕的背景圖片,以及按鈕上的字體大小等,單擊Button折疊項,展開Button控件的樣式參數,更改Normal、Hover、Active、On Normal、On Hover、On Hover、Font Size這幾個參數,如下圖:
然后我們在代碼中創建一個button,代碼如下:
[csharp]view plaincopy
publicGUISkinmySkin;
GUI.skin=mySkin;
GUI.Button(newRect(60,50,588/2,288/2),"開始游戲");
設置mySkin為我們剛才創建的GUISkin,綁定,點擊后的效果如下圖:
GUILayout自動布局,在Unity中GUI控件的布局方式有兩種,一種為固定布局,即在繪制控件的時候將位置參數傳人,指定控件的精確位置;另外Unity還支持控件的自動布局,自動布局適用于控件數量動態的情況,或者是有時候開發者不太在乎控件的精準位置,如果想使用自動布局,那么需要使用GUILayout類來代替前面使用的GUI類,并且去掉Rect()位置參數。
[csharp]view plaincopy
//自動布局
GUILayout.Button("aaaaaaa");
總結
以上是生活随笔為你收集整理的unity3D游戏开发之GUI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么用贝塞尔工具画圆_Win10恶意软件
- 下一篇: OpenCV计算机视觉学习(6)——图像