Unity3D入門之GUI基礎以及常用GUI控件使用(2)


1.GUI基礎

(1)GUI部分是每幀擦除重繪的,只應該在OnGUI中繪制GUI,按鈕:GUILayout.Button(“Hello”); 只讀標簽:GUILayout.Label()

(2)修改控件的顏色:GUI.backgroundColor = Color.red;設置背景色,GUI.color設置前景色,影響OnGUI中之后的控件直到下次修改顏色為止。

 

2.GUILayout類是用於GUI自動布局的接口。

 

3.GUILayout布局

(1)GUILayout布局默認會伸展控件的尺寸。Button等控件支持params GUILayoutOption[] options可變參數數組,可以通過GUILayout.Width(30)返回一個設置控件寬度的GUILayoutOption對象, Height()、 MinWidth()、MinHeight()等同理。例子: GUILayout.Button("Test",GUILayout.Width(500),GUILayout.Height(30))

(2)GUILayout采用線性布局,類似於StackPanel,默認是縱向布局。通過GUILayout.BeginHorizontal();開啟和GUILayout.EndHorizontal()結束一個橫向排列區域,同理BeginVertical() 、EndVertical()。

(3)如果嫌控件太擠,可以使用GUILayout.Space(30);增加若干像素的間隙。

 

4.常用GUI控件

(1)密碼框:pwd = GUILayout.PasswordField(pwd,‘*’),第二個參數為掩碼字符,注意幀刷新的問題。

(2)Button只有鼠標抬起才會返回true,這樣用Button做發射子彈就不能按下一直發射,可以使用RepeatButton,這樣按下期間會一直返回true。案例:Button和RepeatButton實現游戲對象移動。

(3)Tab頁: electedToolBarId = GUILayout.Toolbar(selectedToolBarId,new string[]{“裝備”,“經驗”,“隊友”});  返回值為激活的按鈕的序號。

(4)復選框:isMuted = GUILayout.Toggle(isMuted,“靜音”);

(5)多行文本區: msgBody = GUILayout.TextArea(msgBody,GUILayout.Width(300),GUILayout.Height(300));

(6)滑動條:縱向, sliderValue = GUILayout.VerticalSlider(sliderValue,0,100);返回值為當前值,第二個參數為最小值,第二個為最大值。 HorizontalSlider()橫向

(7)區域Area,相當於一個控件的盒子, Area中的控件跟着Area移動, BeginArea()開始一個區域,參數指定區域的大小和坐標, EndArea()結束區域;

(8)窗口,區域是沒有邊框和標題的,也不可以拖放。 GUILayout.Window(0, new Rect(50,50,200,200),AddWindow1,“我的窗口”);  第一個參數為窗口的編號,第二個為窗口大小,第三個為void WindowFunction(int windowId)委托,用來繪制窗口內容。

窗口拖拽,在WindowFunction的最后調用GUI.DragWindow()可以啟用全屏拖放(給DragWindow傳Rect參數可以設定可拖放的區域)。考慮幀刷新的問題,要在OnGUI把Window()的返回Rect保存才可以可拖動,Start()中設定初始位置。

 

代碼如下:

using UnityEngine;
using System.Collections;

public class Cube1Control : MonoBehaviour {
    public Texture texture;
    public Texture2D texture2D;
    public Texture2D texture2DActive;
    public string userName;
    public string password;
    public string remark;
    public bool isSuccess;
    public int select=0;
    public bool toggle1 = false;
    public Texture2D bug1;
    public Texture2D bug2;
    public float h;
    public Vector2 vector2;
    Rect rect1 = new Rect(0, 10, 300, 500);
    Rect rect2 = new Rect(600, 10, 300, 500);
    public int selGridId = 0;
    string[] selString = new string[] { "Grid1", "Grid2", "Grid3", "Grid4", "Grid5" };

    // Use this for initialization
    void Start () {
        h = 40;
    }
    
    // Update is called once per frame
    void Update () {
    
    }
    
    void win(int id)
    {

        GUI.Button(new Rect(10, 120, 150, 50), "點擊按鈕");

        //使用DragWindow啟用窗口拖動
        GUI.DragWindow();

    }

    void OnGUI()
    {
        #region GUILayout布局
        ////GUILayout采用線性布局,類似於StackPanel,默認是縱向布局。通過GUILayout.BeginHorizontal();
        ////開啟和GUILayout.EndHorizontal()結束一個橫向排列區域,同理BeginVertical() 、EndVertical()。
        //GUILayout.BeginHorizontal();
        //GUILayout.Button("Button1", GUILayout.Width(100), GUILayout.Height(50));
        //GUILayout.Button("Button2", GUILayout.Width(100), GUILayout.Height(50));
        //GUILayout.EndHorizontal();

        //GUILayout.BeginVertical();
        ////如果嫌控件太擠,可以使用GUILayout.Space(30);增加若干像素的間隙。
        //GUILayout.Space(30);//Button3和Button1在垂直方向上面就會增加30個像素的間隙
        //GUILayout.Button("Button3", GUILayout.Width(100), GUILayout.Height(50));
        //GUILayout.Button("Button4", GUILayout.Width(100), GUILayout.Height(50));
        //GUILayout.EndVertical();
        #endregion

        #region 常用的GUI控件
        #region GUI.Button
        //GUI.Button(new Rect(20, 20, 150, 30), "這是一個文字按鈕");

        ////繪制紋理按鈕
        //GUI.Button(new Rect(20, 60, 150, 30), texture);//texture是在unity上面Script腳本上面拖上圖片進行賦值的
        ////繪制一個帶圖片和文字按鈕
        //GUIContent guic = new GUIContent("按鈕", texture);
        //GUI.Button(new Rect(20, 100, 150, 30), guic);

        ////設置按鈕的樣式
        //GUIStyle guis = new GUIStyle();
        //guis.fontSize = 23;
        //guis.alignment = TextAnchor.MiddleCenter;

        ////設置狀態樣式
        //GUIStyleState guiss = new GUIStyleState();
        //guiss.textColor = Color.white;
        //guiss.background = texture2D;//設置按鈕背景圖片,texture2D在編輯器上拖圖片賦值
        //guis.normal = guiss;//設置按鈕正常顯示的狀態
        //GUIStyleState guissActive = new GUIStyleState();
        //guissActive.textColor = Color.white;
        //guissActive.background = texture2DActive;//設置按鈕背景圖片,texture2D在編輯器上拖圖片賦值
        //guis.active = guissActive;//設置鼠標按下去按鈕上顯示的狀態
        //guis.hover = guissActive;//設置鼠標放在按鈕上顯示的狀態
        //if (GUI.Button(new Rect(20, 140, 150, 30), "樣式按鈕", guis))//點擊后返回true
        //{
        //    Debug.Log("點擊了按鈕");
        //} 
        #endregion

        #region GUI.Label
        //GUI.color = Color.red;//全局設置顏色,設置后后面的控件都變為紅色,直到重新設置顏色
        //GUI.Label(new Rect(20, 180, 100, 50), "label1");
        //GUI.color = Color.blue;
        //GUI.Label(new Rect(20, 200, 100, 50), "label2"); 
        #endregion

        #region GUI.TextField GUI.PasswordField GUI.TextArea
        //userName = GUI.TextField(new Rect(10, 10, 100, 30), userName);
        //password = GUI.PasswordField(new Rect(10, 50, 100, 30), password,'*');
        //remark = GUI.TextArea(new Rect(10, 100, 100, 30),remark);
        //if (GUI.Button(new Rect(10,150,50,30),"登錄"))
        //{
        //    Debug.Log(userName + "-"+password+"-"+remark);
        //    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), "登錄失敗!");
        //}
        #endregion

        #region GUI.Toolbar GUI.Toggle  GUI.HorizontalSlider
        //Tab頁,返回值為激活的按鈕的序號,三個按鈕並排,select為0選中第一個按鈕
        //select = GUI.Toolbar(new Rect(0, 0, 300, 50), select, new string[] { "功能一", "功能二", "功能三" });
        //Debug.Log(select);

        //單選按鈕
        //GUIStyle gs = new GUIStyle();
        //GUIStyleState gss = new GUIStyleState();
        //gss.textColor = Color.white;
        //gs.normal = gss;
        //gs.active = gss;
        //GUIContent contenxt = new GUIContent("開關", bug1);
        //if (toggle1)
        //{
        //    contenxt.image = bug2;
        //}
        //// toggle = GUI.Toggle(new Rect(10, 10, 100, 30), toggle, "是否開啟聲音");
        //toggle1 = GUI.Toggle(new Rect(10, 10, 50, 50), toggle1, contenxt, gs);
        //GUI.Label(new Rect(10, 80, 100, 30), toggle1 + "");

        //水平拖動的Slider,h為Slider賦值
        //h = GUI.HorizontalSlider(new Rect(0, 0, 100, 100), h, 0, 100);
        //Debug.Log(h); 
        #endregion

        #region GUI.BeginScrollView GUI.BeginGroup GUI.Window GUI.SelectionGrid
        //開始滾動視圖
        //  public static Vector2 BeginScrollView(Rect position, Vector2 scrollPosition, Rect viewRect, bool alwaysShowHorizontal, bool alwaysShowVertical);
        //position 用於滾動視圖在屏幕上矩形的位置
        //scrollPosition 用來顯示滾動位置
        //viewRect 滾動視圖內使用的矩形
        //vector2 = GUI.BeginScrollView(new Rect(0, 0, 200, 200), vector2, new Rect(0, 0, 200, 200), true, true);
        //GUI.Button(new Rect(0, 0, 50, 50),"Button");
        //GUI.EndScrollView();

        //開始組 將控件都放在一組中,只要組變動,里面的控件都跟着變
        //GUI.BeginGroup(new Rect(10, 100, 200, 400));
        //GUI.Label(new Rect(10, 100, 100, 30), "群組視圖1");
        //GUI.Button(new Rect(10, 130, 100, 30), "按鈕");
        //GUI.EndGroup();
        //GUI.BeginGroup(new Rect(200, 0, 300, 400));
        //GUI.Label(new Rect(10, 100, 100, 30), "群組視圖2");
        //GUI.Button(new Rect(10, 130, 100, 30), "按鈕");
        //GUI.EndGroup();

        //彈出窗口
        //必須要把窗口的位置設置成全局變量,窗口里面內容在回調函數里面寫
        //rect1 = GUI.Window(0, rect1, win, "窗口");
        //rect2 = GUI.Window(1, rect2, win, "窗口");

        //選擇表格
        //selGridId = GUI.SelectionGrid(new Rect(10, 10, 300, 200), selGridId, selString, 2);
        //Debug.Log(selGridId); 
        #endregion

        #region GUILayout.BeginArea
        //區域就是無邊框的窗口,Button控件隨着區域移動
        //GUILayout.BeginArea(new Rect(0, 50, 200, 200), "Area");
        //GUI.Button(new Rect(0,0,100,50),"Button");
        //GUILayout.EndArea(); 
        #endregion

        #endregion

    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM