【Unity编辑器】EditorWindow扩展-SubWindow
2017-10-26 23:14
981 查看
unity项目开发过程中会需要使用到unityeditor的相关api来扩展编辑器,其中EditorWindow可以方便的开发编辑器窗口,可以用来开发打包工具等。但当遇到复杂编辑器需求时,往往会纠结于编辑器的布局而花掉一些时间。
最近尝试写了一套用于实现EditorWindow内部的子窗体的功能,尝试通过可活动的子窗体的方式来加快布局,效果如下:
主要实现了一个子窗体树结构,通过反射的方式来获取标有EWSubWindowAttribute的子窗体绘制函数(或EWSubWindowHandlerAttribute的子窗体绘制对象类)来作为一个窗体叶子节点进行绘制,一个SubWindow树有一个根节点,根节点下包含各个层级的子节点,其中每个节点的子节点权重和为1,权重以子窗口的绘制区域的形式来表现,通过调整每个子窗口大小即修改了节点的权重。
因此在实现EditorWindow时可以不考虑布局,直接编写子窗体绘制函数,通过运行时灵活调整各子窗体的布局:
并且支持保存布局:
支持自定义子窗体的样式:
支持子窗体添加帮助栏和工具栏:
支持子窗体扩展右上角按钮功能:
窗口开启和关闭:
源码请到http://www.lsngo.net/2017/10/24/unityeditor_subwindow/下载
最近尝试写了一套用于实现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可以实现窗口自定义右上角按钮功能:
窗口开启和关闭:
源码请到http://www.lsngo.net/2017/10/24/unityeditor_subwindow/下载
相关文章推荐
- Unity编辑器扩展之EditorWindow
- Unity Editor 编辑器扩展 六 EditorWindow
- Unity Editor 编辑器扩展 五 EditorGUI
- UnityEditor扩展编辑器实现从场景中渲染得到Cubemap
- 在Unity内制作工具(1)--MenuItem,Resouces.FindObjectsofTypeAll<>与EditorWindow自制编辑器窗口
- UnityEditor扩展 - 编辑器中的内置属性Attribute
- Unity扩展编辑器--类型1:Editor Windows
- Unity Editor 编辑器扩展 七 创建脚本模版
- Unity Editor 编辑器扩展 十 Handle控件
- Unity Editor 编辑器扩展 十五 提取NGUI 的Transform ResetPosition 功能
- Unity Editor 编辑器扩展 十一 Inspector可排序列表
- Unity Editor 编辑器扩展 八 Undo
- [cb]Unity Editor Toolbar 编辑器扩展
- Unity Editor 编辑器扩展 十三 自定义创建资源
- Unity Editor 编辑器扩展三 Unity Editor 数据持久化及Editor窗口的初识
- Unity Editor Toolbar 编辑器扩展
- Unity编辑器扩展
- Unity编辑器扩展之修改扩展脚本的成员变量
- Unity Editor编辑器(MenuItem)
- Unity3d UnityEditor编辑器定制和开发插件