前言:
在开发游戏的过程中我们一般都会开发一些便利的开发工具,大部分时候我们都是借助unity自带编辑器去写一些常用工具。然后 有什么错误的理解或者使用的,也欢迎各位指正哈!就当是相互学习了。
EditorWindow
窗口基类,基本上我们需要开发的窗口工具都是继承自EditorWindow。包括unity自身的一些窗口(Hierarchy,Inspector,Scene,Game,Project,Console)等等!
/// <summary>
/// 编辑器基类,方便后期管理拓展
/// </summary>
public class EditorWindowBase<T> : EditorWindow where T : EditorWindow
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
_instance = GetWindow<T>();
}
return _instance;
}
}
/// <summary>
/// 窗口优先级
/// </summary>
public int Priority {
get; set; }
}
EditorWindow的 GetWindow()方法可以返回一个模板窗口,然后我们就基于此窗口,进行拓展。
绘制窗口控件
绘制窗口控件有 几个常用的类: EditorGUI,EditorGUILayout,GUILayout,GUI。这几个类都可以创建常用控件,不同的也是互补的,基本能满足我们的需要!
EditorGUI 和 GUI 是基于我们设置的基准点生成的,无法自动排列!
EditorGUILayout 和 GUILayout 是自动排列的!
GUI 我一般很少用来绘制控件,用的比较多的是修改一些基本属性,比如控件颜色,文本颜色,控件层级什么的!
ToolBar 工具栏
常用的工具栏,就是下拉菜单,按钮,搜索框什么的!废话咱就不多说了,直接看效果!
private void TopToolBar()
{
GUI.color = Color.cyan;
GUILayout.BeginHorizontal(EditorStyles.toolbar);
if (GUILayout.Button("Clear All",EditorStyles.toolbarButton,GUILayout.MaxWidth(100f)))
{
}
if (GUILayout.Button("下拉列表",EditorStyles.toolbarPopup,GUILayout.MaxWidth(200f)))
{
}
CreateDropdown();
SearchField();
GUILayout.EndHorizontal();
GUI.color = Color.white;
}
private void CreateDropdown()
{
Rect rect = GUILayoutUtility.GetRect(m_Styles.m_CreateDropdownContent, EditorStyles.toolbarDropDown,GUILayout.MaxWidth(240f),GUILayout.MinWidth(120f));
if (EditorGUI.DropdownButton(rect,m_Styles.m_CreateDropdownContent,FocusType.Passive,EditorStyles.toolbarDropDown))
{
GUIUtility.hotControl = 0;
EditorUtility.DisplayPopupMenu(rect,"Assets/Create",null);
}
}
private void SearchField()
{
Rect rect = GUILayoutUtility.GetRect(120f, 300f, 18f, 20f, EditorStyles.toolbarSearchField,GUILayout.MinWidth(120f),GUILayout.MaxWidth(