Unity編輯器擴展基礎五、GUI

一、靜態屬性

1、顏色

改變背景顏色:GUI.backgroundColor 

改變內容顏色: GUI.contentColor

改變內容改變內容和背景顏色: GUI.color

        //改變背景顏色
        GUI.backgroundColor = Color.yellow;
        GUI.Button(new Rect(0, 0, 200, 30), "改變背景顏色");
        GUI.backgroundColor = Color.white;
        GUI.Button(new Rect(0, m_interval, 200, 30), "改變背景顏色");

        //改變內容顏色
        GUI.contentColor = Color.yellow;
        GUI.Button(new Rect(0, m_interval * 2, 200, 30), "改變內容顏色");
        GUI.contentColor = Color.white;
        GUI.Button(new Rect(0, m_interval * 3, 200, 30), "改變內容顏色");

        //改變內容和背景顏色
        GUI.color = Color.yellow;
        GUI.Button(new Rect(0, m_interval * 4, 200, 30), "改變內容和背景顏色");
        GUI.color = Color.white;
        GUI.Button(new Rect(0, m_interval * 5, 200, 30), "改變內容和背景顏色");

2、文本輸入框:GUI.TextField

GUI.changed:如果有輸入控件的值發生改變,就會返回true。

        stringToEdit = GUI.TextField(new Rect(0, m_interval * 6, 200, 20), stringToEdit, 25);
        if (GUI.changed)
            Debug.Log("GUI.TextField 內容有修改");

3、  GUI的激活狀態:GUI.enabled

GUI.enabled控制之後的GUI的激活狀態,未激活的GUI不能接收事件。

toggleGroup = GUI.Toggle(new Rect(0, m_interval * 7, 200, 20), toggleGroup, "ToggleGroup");
        GUI.enabled = toggleGroup;
        if (GUI.Button(new Rect(0, m_interval * 8, 200, 30), "測試toggleGroup的按鈕1"))
        {
            Debug.Log("點擊了button1");
        }
        if (GUI.Button(new Rect(0, m_interval * 9, 200, 30), "測試toggleGroup的按鈕2"))
        {
            Debug.Log("點擊了button2");
        }

4、GUI.depth 

5、GUI.matrix

6、GUI.skin

二、靜態方法

1、GUI.Label

 GUI.Label(new Rect(210, 10, 100, 20), "Hello World!");

2、 GUI.Box

  GUI.Box(new Rect(210, 50, 50, 50), "A BOX");

3、GUI.Button

if (GUI.Button(new Rect(210, 110, 70, 30), "A button"))
            Debug.Log("點擊了按鈕!");

4、 GUI.BeginGroup

        m_beginGroupRect = new Rect(0, 0, Screen.width / 2, Screen.height / 2);
        //BeginGroup 可以用來管理UI,UGUI的Panel,組裏面的UI元素是相對於組創建的。
        GUI.BeginGroup(m_beginGroupRect);
        GUI.Box(new Rect(m_beginGroupRect), "自適應的 BeginGroup 測試!");
        GUI.EndGroup();

5、GUI.BeginScrollView

     //滑動區域
        scrollPosition = GUI.BeginScrollView(new Rect(10, 10, 200, 200), scrollPosition, new Rect(0, 0, 220, 200));
        GUI.Button(new Rect(0, 0, 100, 20), "Top-left");
        GUI.Button(new Rect(120, 0, 100, 20), "Top-right");
        GUI.Button(new Rect(0, 180, 100, 20), "Bottom-left");
        GUI.Button(new Rect(120, 180, 100, 20), "Bottom-right");
        GUI.EndScrollView();

6、 GUI.DrawTexture、GUI.DrawTextureWithTexCoords

        //畫一個圖片
        if (aTexture)
        {
            GUI.DrawTexture(new Rect(10, 110, 110, 110), aTexture, ScaleMode.StretchToFill, true, 10.0F);
            GUI.DrawTextureWithTexCoords(new Rect(10, 240, 110, 110), aTexture, new Rect(10, 240, 110, 110), false);
        }

7、 GUI.SetNextControlName

爲下一個控件設置控件名稱。

8、 GUI.FocusControl

通過控件名稱設置聚焦,設置聚焦時參數爲控件名稱,取消聚焦時參數爲null。(EditorGUILayout.TextField 控件如果被聚焦,返回的值修改之後,不會馬上刷新,需要取消聚焦才能看到刷新之後的值。)

   GUI.SetNextControlName("MyTextField");
        username = GUI.TextField(new Rect(10, 410, 100, 20), username);
        pwd = GUI.TextField(new Rect(10, 440, 100, 20), pwd);
        if (GUI.Button(new Rect(10, 470, 80, 20), "設置聚焦"))
            GUI.FocusControl("MyTextField");

        if (GUI.Button(new Rect(10, 500, 80, 20), "取消聚焦"))
            GUI.FocusControl(null);//取消聚焦

9、GUI.HorizontalSlider、GUI.VerticalSlider、GUI.HorizontalScrollbar、GUI.VerticalScrollbar

        hSliderValue = GUI.HorizontalSlider(new Rect(210, 150, 100, 30), hSliderValue, 0.0F, 10.0F);
        vSliderValue = GUI.VerticalSlider(new Rect(210, 170, 100, 30), vSliderValue, 10.0F, 0.0F);
        hSValue = GUI.HorizontalScrollbar(new Rect(210, 210, 100, 30), hSValue, 1.0F, 0.0F, 10.0F);
        vSValue = GUI.VerticalScrollbar(new Rect(210, 230, 100, 30), vSValue, 1.0F, 10.0F, 0.0F);

10、GUI.GetNameOfFocusedControl

獲取當前聚焦的控件名稱,如果沒有聚焦或者沒有控件命名返回空字符串。

11、GUI.Window、 GUI.FocusWindow、GUI.DragWindow 

 GUI.BringWindowToBack、GUI.BringWindowToFront

 //GUI.depth、GUI.BringWindowToBack、GUI.BringWindowToFront都可以改變窗口的層級
    //GUI.BringWindowToBack  GUI.BringWindowToFront
    private Rect windowRect = new Rect(20, 20, 120, 120);
    private Rect windowRect2 = new Rect(80, 20, 120, 120);
    private Rect windowRect3 = new Rect(150, 20, 120, 120);

    // GUI.depth 
    int guiDepth1 = 0;
    int guiDepth2 = 0;

    //
    string m_focusedControlName = "";
    void OnGUI()
    {
        windowRect = GUI.Window(0, windowRect, DoMyWindow1, "第一個窗口");
        windowRect2 = GUI.Window(1, windowRect2, DoMyWindow2, "第二個窗口");
        windowRect3 = GUI.Window(2, windowRect3, DoMyWindow3, "第三個窗口");
    }
    void DoMyWindow1(int windowID)
    {
       // GUI.depth = guiDepth1;
        if (GUI.Button(new Rect(10, 20, 100, 20), "Window1"))
        {
            //GUI.BringWindowToBack(1);//將窗口id爲1的窗口設置到最後
            //guiDepth1 = 1;
            //guiDepth2 = 0;
            //GUI.BringWindowToFront(1);//將窗口id爲1的窗口設置到最前
            GUI.FocusWindow(1);  //聚焦到id爲1的窗口
        }
        //DragWindow 可拖動的窗口
        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }
    void DoMyWindow2(int windowID)
    {
        //GUI.depth = guiDepth2;
        if (GUI.Button(new Rect(10, 20, 100, 20), "Window2"))
        {
            //GUI.BringWindowToBack(2);
            //guiDepth1 = 0;
            //guiDepth2 = 1;
            GUI.BringWindowToFront(2);
        }

        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }
    void DoMyWindow3(int windowID)
    {
       // GUI.depth = guiDepth2;
        if (GUI.Button(new Rect(10, 20, 100, 20), "Window3"))
        {
            //GUI.BringWindowToBack(0);
            //guiDepth1 = 0;
            //guiDepth2 = 1;
            GUI.BringWindowToFront(0);
          
        }
        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章