Unity 四大GUI系統

前言
首先,對於編輯器中的GUI系統,我們可以分爲四大類:
1、UnityEngine.GUI
2、UnityEngine.GUILayout
3、UnityEditor.EditorGUI
4、UnityEditor.EditorGUILayout

GUI系統
這是運用最廣泛的GUI系統,所屬命名空間UnityEngine,用其繪製的所有控件不帶有自動佈局效果,需要手動指定每個控件的繪製位置和大小,自適應性較弱,但開發自由度較高。

注意:GUI系統可以在發佈後使用,也可以在編輯器中使用。

GUI系統的控件使用例子
    private void OnGUI()
    {
        GUI.Button(new Rect(0, 0, 100, 30), "Button");
        GUI.Label(new Rect(100, 0, 100, 30), "Label");
        GUI.PasswordField(new Rect(0, 30, 100, 30), "Password", '$');
        GUI.Toggle(new Rect(100, 30, 100, 30), true, "Toggle");
    }

GUILayout系統
帶自動佈局的GUI系統,所屬命名空間UnityEngine,用其繪製的所有控件都帶有自動佈局效果,自適應性較強,但開發自由度較低。

注意:GUILayout系統可以在發佈後使用,也可以在編輯器中使用。

GUILayout系統的控件使用例子
水平佈局
    private void OnGUI()
    {
        GUILayout.BeginHorizontal("Box"); //開始一個水平佈局
        GUILayout.Button("Button");
        GUILayout.Label("Label");
        GUILayout.PasswordField("Password", '$');
        GUILayout.Toggle(true, "");
        GUILayout.EndHorizontal();        //結束一個水平佈局

        GUILayout.BeginHorizontal("Box"); //開始一個水平佈局
        GUILayout.Button("Button");
        GUILayout.Label("Label");
        GUILayout.PasswordField("Password", '$');
        GUILayout.Toggle(true, "");
        GUILayout.FlexibleSpace();        //創建一個自適應的空白區域,也即是填滿本次佈局中的這部分空間
        GUILayout.EndHorizontal();        //結束一個水平佈局

        GUILayout.BeginHorizontal("Box"); //開始一個水平佈局
        GUILayout.FlexibleSpace();        //創建一個自適應的空白區域,也即是填滿本次佈局中的這部分空間
        GUILayout.Button("Button");
        GUILayout.Label("Label");
        GUILayout.PasswordField("Password", '$');
        GUILayout.Toggle(true, "");
        GUILayout.EndHorizontal();        //結束一個水平佈局
    }


垂直佈局
    private void OnGUI()
    {
        GUILayout.BeginVertical("Box"); //開始一個垂直佈局
        GUILayout.Button("Button");
        GUILayout.Label("Label");
        GUILayout.PasswordField("Password", '$');
        GUILayout.Toggle(true, "");
        GUILayout.EndVertical();        //結束一個垂直佈局
    }


    private void OnGUI()
    {
        GUILayout.BeginVertical("Box"); //開始一個垂直佈局
        GUILayout.FlexibleSpace();      //創建一個自適應的空白區域,也即是填滿本次佈局中的這部分空間
        GUILayout.Button("Button");
        GUILayout.Label("Label");
        GUILayout.PasswordField("Password", '$');
        GUILayout.Toggle(true, "");
        GUILayout.EndVertical();        //結束一個垂直佈局
    }


滾動視野
    private Vector2 _scroll;
    private void OnGUI()
    {
        _scroll = GUILayout.BeginScrollView(_scroll);//開始一個滾動視野
        GUILayout.BeginVertical("Box");              //開始一個垂直佈局
        for (int i = 0; i < 20; i++)
        {
            GUILayout.Button("Button" + (i + 1));
        }
        GUILayout.EndVertical();                     //結束一個垂直佈局
        GUILayout.EndScrollView();                   //結束一個滾動視野
    }


EditorGUI系統
適用於編輯器的GUI系統,所屬命名空間UnityEditor,用其繪製的所有控件不帶有佈局效果,需要手動指定每個控件的繪製位置和大小,跟GUI系統的差別是其擁有部分編輯器專用控件,且其只能運行在編輯器內,自適應性較弱,但開發自由度較高。

注意:EditorGUI系統不可以在發佈後使用,只能在編輯器中使用。

###EditorGUI系統的控件使用例子

    private void OnGUI()
    {
        EditorGUI.ColorField(new Rect(0, 0, 100, 30), Color.red);
        EditorGUI.DoubleField(new Rect(0, 30, 100, 30), 10);
        EditorGUI.ProgressBar(new Rect(0, 60, 100, 30), 0.5f, "ProgressBar");
    }
1
2
3
4
5
6


EditorGUILayout系統
帶自動佈局的EditorGUI系統,所屬命名空間UnityEditor,用其繪製的所有控件都帶有自動佈局效果,跟GUILayout系統的差別是其擁有部分編輯器專用控件,且其只能運行在編輯器內,自適應性較強,但開發自由度較低。

注意:EditorGUILayout系統不可以在發佈後使用,只能在編輯器中使用。

###EditorGUILayout系統的控件使用例子

    private void OnGUI()
    {
        EditorGUILayout.BeginHorizontal("Box");    //開始一個水平佈局
        EditorGUILayout.LabelField("LabelField");
        EditorGUILayout.PasswordField("PasswordField");
        EditorGUILayout.RectField(Rect.zero);
        EditorGUILayout.EndHorizontal();           //結束一個水平佈局
    }

以上四個GUI系統可以混用,EditorGUI和EditorGUILayout系統中的控件多是帶Field,可見其用意主要是用來展示字段的值,GUI系統由於不帶佈局,所以在編輯器開發中使用的較少,除非有時候需要創建高自由度的界面時會首選他,GUILayout系統開發編輯器工具是使用得最多的。

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