unity3d-EditorWindow

EditorWindow:
编辑器中的GUI系统有4大类:
1.GUI
2.GUILayout
3.EditorGUI
4.EditorGUILayout

1、2的命名空间是UnityEngine;3、4的命名空间是UnityEditor。
1、3属于固定布局,需要自己去设定每一个控件的位置;2、4属于自动布局,编译器识别并设定每一个控件的位置。

EditorWindow是用于开发unity3d编辑器上的视图。
其生命周期独立于游戏,属于另一周期:
unity3d-EditorWindow_第1张图片
下面演示我自己写的一个例子:一个主窗口,一个子窗口。点击主窗口的按钮弹出子窗口。
效果:
点击MyMain弹出主窗口
unity3d-EditorWindow_第2张图片
点击按钮弹出子窗口
unity3d-EditorWindow_第3张图片
主窗口:MyMain

using UnityEngine;
using UnityEditor;

public class MyMain : EditorWindow
{

    public static MyMain mainWindow;

    Rect rect = new Rect(200, 0, 1300, 700);
    bool isDrawNewResView = false;
    Vector2 scrollerPosition;//每一个滚动条对应一个position
    int index1 = 0;//选项框选项
    int index2 = 1;
    string text1 ="我是第一行";
    string text2 ="我是第二行";
    //缓存
    GUILayoutOption width_50 = GUILayout.Width(50);//编辑框长度
    GUILayoutOption width_80 = GUILayout.Width(80);
    GUILayoutOption high_80 = GUILayout.Height(80);//按钮高度
    GUIStyle labelStyle = new GUIStyle();//字体样式

    string[] options = { "1","2", "3" };

    [MenuItem("Window/MyMain")]
    static public void OpenAtlasMakerExtended()
    {
        mainWindow = EditorWindow.GetWindow(false, "title", true);
        mainWindow.Show();
    }

    void OnEnable()
    {
        SetStyle();

    }

    void OnGUI()
    {
        if (GUILayout.Button("子窗口", high_80,width_80))
        {
            isDrawNewResView = true;
        }
        if (isDrawNewResView)
        {
            SetShowView();
        }

    }

    //注册子窗口
    void SetShowView()
    {
        BeginWindows();
        //创建内联窗口,参数分别为id,大小位置,创建子窗口的组件的函数,标题
        rect = GUILayout.Window(1, rect, ShowLittleView, "title");
        EndWindows();
    }


    //显示子窗口
    public void ShowLittleView(int unusedWindowID)
    {
        DrawLittleView();
        GUI.DragWindow();
    }

    void SetStyle()
    {
        //多种字体样式自己选择

        //labelStyle.normal.textColor = Color.yellow;
        //labelStyle.fontSize = 15;
        //labelStyle.fontStyle = FontStyle.Bold;

        //labelStyle.normal.textColor = Color.yellow;
        //labelStyle.fontStyle = FontStyle.Bold;

        labelStyle.normal.textColor = Color.yellow;
    }

    //绘制子窗口
    void DrawLittleView()
    {
        if (GUILayout.Button("关闭", width_80))//创建button
        {
            isDrawNewResView = false;
        }
        GUILayout.FlexibleSpace();//弹性控件,填充空白,你们可以去除对比一下效果
        scrollerPosition = GUILayout.BeginScrollView(scrollerPosition, GUILayout.Width(1300), GUILayout.Height(900));//自动加滚动条的布局,第一个参数是滚动条的position,不需要初始化,每个滚动条对应一个,后两个参数是宽高
                                                                                                                     		//第一行
        GUILayout.BeginHorizontal();//水平布局开始
        GUILayout.Label("第一行", labelStyle);//第二个参数是字体类型
        text1 = GUILayout.TextField(text1, width_80);//编辑框
        index1 = EditorGUILayout.Popup(index1, options, width_50);//选项框
        GUILayout.FlexibleSpace();//弹性控件,填充空白,你们可以去除对比一下效果
        GUILayout.EndHorizontal();//水平布局结束
        //第二行
        GUILayout.BeginHorizontal();//水平布局开始
        GUILayout.Label("第二行", labelStyle);//第二个参数是字体类型
        text2 = GUILayout.TextField(text2, width_80);//编辑框
        index2 = EditorGUILayout.Popup(index2, options, width_50);//选项框
        GUILayout.FlexibleSpace();//弹性控件,填充空白,你们可以去除对比一下效果
        GUILayout.EndHorizontal();//水平布局结束

        GUILayout.EndScrollView();//滚动条布局结束

    }
}

转载:
GUILayout.TextField支持赋值粘贴的方法:https://blog.csdn.net/linxinfa/article/details/102838569
基本控件使用:
https://mp.weixin.qq.com/s/tMSAIND4Pq0farn2jY8rwg?
u3d官方手册例子:
https://docs.unity3d.com/ScriptReference/EditorWindow.html

你可能感兴趣的:(unity)