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", EWSubWi