Unity3D编辑器扩展2——自定义窗口EditorWindow
发布日期:2021-05-10 06:02:04 浏览次数:17 分类:原创文章

本文共 2794 字,大约阅读时间需要 9 分钟。

前言

第二篇U3D的笔记了,希望能一直坚持写下去。

什么是EditorWindow

EditorWindow就是一种可视化窗口,可以贴在Unity界面的各个位置。比如,我们的场景窗口Scene、游戏窗口Game、资源商店窗口Asset Store、层级窗口Hierarchy等。

Unity自带的窗口毕竟有限,所以如果我们想要自定义自己的工具窗口,就需要用到编辑器扩展。

第一步

首先用UnityEditor库。

using UnityEditor;

之后创建你自己的自定义窗口类,并且继承EditorWindow类。

public class MyWindow : EditorWindow{   	//这里面是我们接下来要写的}

几个关键方法

EditorWindow里面有几个很关键的方法,我们需要通过实现这些方法来完成我们的自定义窗口。

当然,我们用到的并不是EditorWindow里面所有的方法(不需要全部用到),想要查看更多方法去官网查即可。


Init(),初始化窗口的方法。这里加上了MenuItem特性,以便在Unity菜单栏中直接打开。

[MenuItem("Tools/新建我的窗口")]public static void Init(){       MyWindow myWindow = EditorWindow.GetWindow(typeof(MyWindow)) as MyWindow;//新建窗口    myWindow.Show();//显示窗口}

OnEnable(),窗口显示时会调用的方法。

public void OnEnable(){       this.titleContent = new GUIContent("我的窗口");//设置窗口标题}

OnGUI(),窗口界面。

public void OnGUI(){       GUILayout.Label("我是普通框", EditorStyles.boldLabel);//普通框    num1 = EditorGUILayout.IntField("num1", num1);//int类型填空框    num2 = EditorGUILayout.FloatField("num2", num1);//float类型填空框    num3 = EditorGUILayout.IntSlider("num3", num3, 0, 100);//int类型滑块    if (GUILayout.Button("我是按钮"))    {           Debug.Log("我点击了按钮!!");    }    if(GUILayout.Button("创建进度条"))//不会强制停止其他操作    {           EditorUtility.DisplayProgressBar("我是进度条", "我是内容", num3/100f);    }    if(GUILayout.Button("结束进度条"))    {           EditorUtility.ClearProgressBar();    }    if(GUILayout.Button("显示复杂对话框"))//会强制停止其他操作,直到对话框消失    {           int choose = EditorUtility.DisplayDialogComplex("我是对话框标题", "我是对话框内容", "我是OK", "我是CANCEL", "我是ALT");        switch(choose)        {               case 0:                Debug.Log("我点击了OK");                break;            case 1:                Debug.Log("我点击了CANCEL");                break;            case 2:                Debug.Log("我点击了ALT");                break;            default:                Debug.Log("我啥也没点");                break;        }    }    if(GUILayout.Button("弹窗"))//这里的弹窗在底下说明    {           PopupWindow.Show(GUILayoutUtility.GetLastRect(), new MyPopupWindowContent());    }}

代码里面都是一些常用的组件,大家自己动手实践一下很容易的。

弹窗PopupWindow

在上面的OnGUI()方法里面的最后一行,实现了一个弹窗。

其中PopupWindow.Show()方法的第一个参数是Rect类型的,意思是这个弹窗出现的位置;第二个参数是PopupWindowContent类型的,意思是这弹窗的内容。这个PopupWindowContent我们需要自定义一下。

public class MyPopupWindowContent : PopupWindowContent{       public override void OnGUI(Rect rect)//弹窗的显示界面    {           EditorGUILayout.LabelField("Laaaaaaable");//普通标签    }    public override void OnOpen()//打开时调用    {           Debug.Log("打开了弹窗");    }    public override void OnClose()//关闭时调用    {           Debug.Log("关闭了弹窗");    }    public override Vector2 GetWindowSize()//弹窗大小    {           return new Vector2(200, 300);//弹窗大小    }}

小结

自定义的窗口可以让我们更加方便使用自己实现的扩展工具。具体操作以及功能还有很多,这里描述的只是最基本的实现。因为本人也还在学习过程中,所以肯定有很多地方考虑不全,以及会有很多错误。希望有大佬看到能够及时指出,我会立刻进行改正,帮助我自己和大家共同进步!

有问题的小伙伴们可以在下方留言,大家可以一起讨论。

上一篇:Unity3D导入设置——Import Settings
下一篇:Unity3D编辑器扩展1——批量处理资源

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年05月05日 17时33分21秒