前言
前一段时候写过一些UI代码生成工具、场景相机编辑器、UI运行编辑器等UnityEditor扩展功能。这里做一下常用函数总结
例子(框架)
using UnityEditor;
using UnityEngine;
public class SomeEditor: EditorWindow
{
//需要序列化数据区
class Data01
{
}
class Data02
{
}
//窗口打开区
private static SomeEditor win;
private static GUIContent TITLE = new GUIContent("窗口标题");
[MenuItem("Tools/编辑器框架")]
public static void OpenEditorWin()
{
win = GetWindow<SomeEditor>();
win.titleContent = TITLE;
win.minSize = new Vector2(720,500);
win.maxSize = win.minSize;
win.Show();
}
//窗口绘制区
private string[] tab = {"Tab01","Tab02"};
private int tabIndex = 0;
private int TabIndex
{
get
{
return tabIndex
}
set{
if(tabIndex!=value)
{
TabChanged();
}
}
}
private void OnGUI()
{
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
//筛选框
TabIndex = GUILayout.ToolBar(TabIndex,tab,GUILayout.Height(40),GUILayout.Width(200));
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.Box("",GUILayout.Height(3),GUILayout.ExpandWidth(true));
switch(TabIndex)
{
case 0:
DrawFunc01GUI();
break;
case 1:
DrawFunc02GUI();
break;
}
}
private void TabChanged()
{
//Do Something
}
//具体功能绘制
private void DrawFunc01GUI(){}
private void DrawFunc02GUI(){}
//字段声明区
private List<Data01> func01List= new List<Data01>();
private List<Data02> func02List = new List<Data02>();
//功能数据初始化与释放
private void Func01DataInit()
{
func01List.Clear();
}
private void Func02DataInit()
{
func02List.Clear();
}
private void Func01DataRelease()
{
func01List.Clear();
}
private void Func02DataRelease()
{
func02List.Clear();
}
//数据化系列化
private void SaveToExcel(){}
//窗体销毁释放
private void OnDisable()
{
Func01DataRelease();
Func02DataRelease();
}
private void OnDestroy()
{
OnDisable();
}
}
常用的代码块(供以后快速开发使用)
//开启横向排版
GUILayout.BeginHorizontal();
//do something
GUILayout.EndHorizontal();
//开启竖向排版
GUILayout.BeginVertical();
//do something
GUILayout.EndVertical();
//按钮
if(GUILayout.Button("按钮名",GUILayout.Width(100),GUILayout.Height(20)))
{
//do something
}
//标签
GUILayout.Label(new GUIContent("这是一个标签"));
//输入文本
string str = GUILayout.TextField(str,GUILayout.Width(100),GUILayout.Height(20));
//空10个像素
GUILayout.Space(10);
//开一个Box
GUILayout.Box("单行文字",GUILayout.ExpandWidth(true),GUILayout.Height(20));
GUI.backgroundColor = Color.red;
GUI.backgroundColor = Color.white;
ShowNotification(new GUIContent("显隐提示"));
总结
以上是非常简单的一个编辑的模板,之后再进行开发编辑器功能,直接复制后,按照具体逻辑,能够开发出一些提高效率的工具。
这里抛砖引玉能够延伸到其他方面,在重复性代码非常多的时候,或者某些开发能够明显发现逻辑规律,就能制作代码模板批量生成,或者能够快速开发逻辑规律大同的功能,从而可以开发出各种提高工作效率的工具。
Unity官网UnityEditor扩展API参考文档:https://docs.unity3d.com/ScriptReference/EditorWindow.html