[转]unity3D游戏开发之GUI
轉自:http://blog.csdn.net/kuloveyouwei/article/details/23598171
GUI在游戲的開發(fā)中占有重要的地位,游戲的GUI是否友好,使用是否方便,很大程度上決定了玩家的游戲體驗。Unity內置了一套完整地GUI系 統(tǒng),提供了從布局、控件到皮膚的一整套GUI解決方案,可以做出各種風格和樣式的GUI界面。在Unity中使用GUI來完成GUI的繪制工作,目前 Unity沒有提供內置的GUI可視化編輯器,因此GUI界面的制作需要全部通過編寫腳本代碼來實現,如果游戲有比較多的界面制作需求,可以通過編寫編輯 器腳本來制作適合自身需求的GUI編輯器,或者借助第三方的GUI插件,如NGUI。
Unity的GUI類提供了豐富的界面控件,可以將這些控件配合使用,GUI控件,如下圖:
GUI代碼需要在OnGUI函數中調用才能繪制,GUI的控件一般都需要傳人Rect參數來指定屏幕繪制區(qū)域,例如 Rect(0,10,200,300),對應的屏幕矩形區(qū)域左上角的坐標為(0,10),寬度為200,高度為300,在Unity GUI中,屏幕坐標系以左上角為原點
接下來我們看Label控件,Label控件適合用來顯示文本信息或者圖片,我們新建一個c#腳本,叫做TestGUI.cs,然后綁定到我們的Main Camera對象上,Label初始化代碼如下:
void OnGUI() {//GUI.color = Color.red;GUI.Label(new Rect (10, 10, 100, 200), "Hello World!");GUI.Label (new Rect (100, 100, texture.width/4, texture.height/4), texture); }?
我們定于了兩個label,一個顯示文字,另一個顯示了一張圖片,如下圖:
Box控件,Box控件用來繪制帶有邊框背景的文字或圖片,代碼如下:
void OnGUI(){//GUI.color = Color.red;//GUI.Label(new Rect (10, 10, 100, 200), "Hello World!");//GUI.Label (new Rect (100, 100, texture.width/4, texture.height/4), texture);GUI.Box (new Rect (10, 10, Screen.width * 0.5f, Screen.height * 0.5f), "This is a title");GUI.Box (new Rect (150, 170, texture.width/4, texture.height/4), texture);}?
效果如下:
Button控件,Button控件用來繪制響應單擊事件的按鈕,代碼如下:
GUI.Button (new Rect (10, 10, 150, 50), "這是一個文字按鈕");//圖片按鈕GUI.Button (new Rect (150, 100, texture.width/4, texture.height/4), texture);?
效果如下圖:
繪制一個文字圖片的按鈕,代碼如下:
//繪制一個帶圖片和文字按鈕GUIContent guic = new GUIContent("按鈕", texture);GUI.Button(new Rect(10, 70, 150, 30), guic);我們可以設置按鈕的點擊事件,代碼如下:
GUI.Button (new Rect (10, 10, 150, 50), "這是一個文字按鈕"); //圖片按鈕 if(GUI.Button (new Rect (150, 100, texture.width/4, texture.height/4), texture)) {Debug.Log("--------aaa"); } //繪制一個帶圖片和文字按鈕 GUIContent guic = new GUIContent("按鈕", texture); GUI.Button(new Rect(10, 70, 150, 30), guic);?
當我們點擊了按鈕,就會在控制臺輸出打印的內容,
TextField控件,在游戲中,經常需要用到信息輸入的窗口,比如聊天窗、用戶信息的輸入等;PasswordField控件用于繪制密碼輸入 框,經常用于用戶登錄界面中;TextArea控件與TextField的用法類似,區(qū)別就是TextField是單行的,TextArea可以編輯多行 的文字,創(chuàng)建的代碼如下:
using UnityEngine; using System.Collections;public class TestGUI : MonoBehaviour {public Texture2D texture;public string userName;public string password;public bool isSuccess;// Use this for initializationvoid Start () {userName = "admin";password="123";}// Update is called once per framevoid Update () {}void OnGUI(){//GUI.color = Color.red;//GUI.Label(new Rect (10, 10, 100, 200), "Hello World!");//GUI.Label (new Rect (100, 100, texture.width/4, texture.height/4), texture);//GUI.Box (new Rect (10, 10, Screen.width * 0.5f, Screen.height * 0.5f), "This is a title");//GUI.Box (new Rect (150, 170, texture.width/4, texture.height/4), texture);// GUI.Button (new Rect (10, 10, 150, 50), "這是一個文字按鈕"); // //圖片按鈕 // if(GUI.Button (new Rect (150, 100, texture.width/4, texture.height/4), texture)) // { // Debug.Log("--------aaa"); // // // } // // //繪制一個帶圖片和文字按鈕 // GUIContent guic = new GUIContent("按鈕", texture); // GUI.Button(new Rect(10, 70, 150, 30), guic); userName=GUI.TextField (new Rect (10, 10, 150, 30), userName);//'*'密碼字符串的掩碼字符password=GUI.PasswordField (new Rect (10, 50, 150, 30), password, '*', 25);GUI.TextArea(new Rect(10, 100, 150, 50),"abcderfasdasdasdasfasdaasdfdfsfsd");if (GUI.Button (new Rect (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(new Rect(10, 200, 100, 30), "登錄成功!");} else { GUI.Label(new Rect(10, 200, 100, 30), "登錄失敗!");}} }?
效果如下:
Toggle控件可以用于制作開關按鈕,每次單擊,它都會在開和關的狀態(tài)之間切換,創(chuàng)建代碼如下:
//文字toggleTxt = GUI.Toggle (new Rect (10, 10, 100, 30), toggleTxt, "A Toggle text");//圖片toggleImg = GUI.Toggle (new Rect (10, 50, 50, 50), toggleImg, texture);?
效果如下圖:
ToolBar控件適用于繪制一組按鈕,在這些按鈕中同時只激活一個,可以用來制作工具欄,創(chuàng)建代碼如下:
public int toolbarInt;toolbarInt=GUI.Toolbar(new Rect(10,10,250,30),toolbarInt,new string[]{"功能一","功能二","功能三"});效果如下圖:
Silder滑動條是一種很常用的界面元素,可用在音量調整、進度顯示、數值調整的GUI界面中,在Unity中Slider控件分為水平和垂直2種,對應的GUI函數為HorizontalSlider和VerticalSlider,創(chuàng)建代碼如下:
hSliderValue = GUI.HorizontalSlider (new Rect (50, 25, 100, 30), hSliderValue, 0.0f, 10.0f); //顯示水平滑動條數值 GUI.Label(new Rect(25,22,100,30),hSliderValue.ToString("0.00"));vSliderVaule = GUI.VerticalSlider (new Rect (25, 70, 30, 100), vSliderVaule, 0.0f, 10.0f);//顯示垂直滑動條數值 GUI.Label(new Rect(22,170,100,30),vSliderVaule.ToString("0.00"));?
效果如下圖:
Scrollbar控件,滾動條Scrollbar常用于頁面區(qū)域的滾動,例如文檔瀏覽中,在Unity中Scrollbar控件分為水平和垂直2種,對應的GUI函數為HorizontalScrollbar和VerticalScrollbar,創(chuàng)建代碼如下:
hSbarValue = GUI.HorizontalScrollbar (new Rect (25, 25, 100, 30), hSbarValue, 1.0f, 0.0f, 10.0f);vSbarVaule = GUI.VerticalScrollbar (new Rect (25, 50, 30, 100), vSbarVaule, 1.0f, 10.0f, 0.0f);?
效果如下圖:
Unity默認的控件外觀十分簡單,在游戲開發(fā)過程中,開發(fā)者都會根據游戲的類型和內容來設計一套個性化的游戲界面,Unity可以通過配置 GUISkin來更改控件的默認樣式,制作出符合游戲風格的控件外觀。依次打開菜單欄中的Assets->Create->GUI Skin來創(chuàng)建GUISkin,如下圖:
單擊GUISkin文件,在Inspector視圖中可以對GUISkin的參數進行設置,假設現在需要更換按鈕的背景圖片,以及按鈕上的字體大小 等,單擊Button折疊項,展開Button控件的樣式參數,更改Normal、Hover、Active、On Normal、On Hover、On Hover、Font Size這幾個參數,如下圖:
然后我們在代碼中創(chuàng)建一個button,代碼如下:
public GUISkin mySkin;GUI.skin = mySkin;GUI.Button (new Rect (60, 50, 588 / 2, 288 / 2), "開始游戲");?
設置mySkin為我們剛才創(chuàng)建的GUISkin,綁定,點擊后的效果如下圖:
GUILayout自動布局,在Unity中GUI控件的布局方式有兩種,一種為固定布局,即在繪制控件的時候將位置參數傳人,指定控件的精確位 置;另外Unity還支持控件的自動布局,自動布局適用于控件數量動態(tài)的情況,或者是有時候開發(fā)者不太在乎控件的精準位置,如果想使用自動布局,那么需要 使用GUILayout類來代替前面使用的GUI類,并且去掉Rect()位置參數。
//自動布局 GUILayout.Button ("aaaaaaa");?
?轉載于:https://www.cnblogs.com/dad-bod/p/5507641.html
總結
以上是生活随笔為你收集整理的[转]unity3D游戏开发之GUI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统日志_如何使用 Linux
- 下一篇: 十进制数转换BCD码