Calmer的文章

  • 首页
  • 文章归档
  • 关于页面

  • 搜索
体验游戏 笔记 推荐 工具链 工具使用 小游戏 插件 UI 软件 教程

Unity3D编辑器扩展(自定义窗口)

发表于 2020-12-09 | 分类于 游戏开发 | 0 | 阅读次数 843

前言

前一段时候写过一些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

  • 本文作者: Calmer
  • 本文链接: https://mytechplayer.com/archives/unity3d编辑器扩展自定义窗口
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
# 笔记
客户端进阶方向初步探索
UE4学习笔记(一):FString、FText、FName、TEXT、LOCTEXT、NSLOCTEXT
  • 文章目录
  • 站点概览
Calmer

Calmer

88 日志
7 分类
10 标签
RSS
Creative Commons
0%
© 2020 — 2025 Calmer
由 Halo 强力驱动
蜀ICP备20010026号-1川公网安备51019002006543
Copyright © 2020-2025 Calmer的文章