【Unity编辑器】EditorWindow扩展-SubWindow

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/mobilebbki399/article/details/78359903
unity项目开发过程中会需要使用到unityeditor的相关api来扩展编辑器,其中EditorWindow可以方便的开发编辑器窗口,可以用来开发打包工具等。但当遇到复杂编辑器需求时,往往会纠结于编辑器的布局而花掉一些时间。
最近尝试写了一套用于实现EditorWindow内部的子窗体的功能,尝试通过可活动的子窗体的方式来加快布局,效果如下:


主要实现了一个子窗体树结构,通过反射的方式来获取标有EWSubWindowAttribute的子窗体绘制函数(或EWSubWindowHandlerAttribute的子窗体绘制对象类)来作为一个窗体叶子节点进行绘制,一个SubWindow树有一个根节点,根节点下包含各个层级的子节点,其中每个节点的子节点权重和为1,权重以子窗口的绘制区域的形式来表现,通过调整每个子窗口大小即修改了节点的权重。

因此在实现EditorWindow时可以不考虑布局,直接编写子窗体绘制函数,通过运行时灵活调整各子窗体的布局:

[EWSubWindow("SunWinA", EWSubWindowIcon.Game)]
private void SubWinA(Rect main)
{
    GUI.Label(new Rect(main.x, main.y, main.width, 20), "SubWinA");
 
}
 
[EWSubWindow("Grid", EWSubWindowIcon.Game, true, SubWindowStyle.Grid)]
private void SubWinA(Rect main)
{
    if (GUI.Button(new Rect(main.x, main.y, 100, 20), "Btn"))
    {
 
    }
}

并且支持保存布局:



支持自定义子窗体的样式:


支持子窗体添加帮助栏和工具栏:


[EWSubWindow("SunWinB", EWSubWindowIcon.None, true, SubWindowStyle.Default, EWSubWindowToolbarType.Normal)]
   private void SubWinB(Rect main, Rect toolbar)
   {
       GUI.Label(new Rect(main.x, main.y, main.width, 20), "这是一个有Toolbar的SubWindow");
 
       if(GUIEx.ToolbarButton(new Rect(toolbar.x,toolbar.y, 100, toolbar.height), "btn")) { }
   }

支持子窗体扩展右上角按钮功能:
[EWSubWindowHandle(typeof(TestWinE))]
[System.Serializable]
class TestDrawerForTestWinE2 : SubWindowCustomDrawer, ISubWinCustomMenu, ISubWinLock
通过实现ISubWinCustomMenu和ISubWinLock可以实现窗口自定义右上角按钮功能:


窗口开启和关闭:








猜你喜欢

转载自blog.csdn.net/mobilebbki399/article/details/78359903