精华内容
参与话题
问答
  • Unity 编辑器扩展总结 一:编辑器开发入门

    万次阅读 多人点赞 2018-12-02 14:59:20
    编辑器扩展总结 工欲善其事必先利其器 引言: 在项目开发中,编辑器扩展为开发者提供了开发自定义工具的功能,让开发者更加便利地使用编辑器开发项目。近期小生一直在学习编辑器扩展的知识,发现网络上关于...

    编辑器扩展总结

    工欲善其事必先利其器

    引言: 在项目开发中,编辑器扩展为开发者提供了开发自定义工具的功能,让开发者更加便利地使用编辑器开发项目。]如若博客中存在错误,还请不吝赐教。所有参考的博客或者视频来源将在文末展示。
    扩展: 在Unity2019.1版本后,官方推出全新的保留模式UI框架-UIElements,是一款可以轻松扩展unity编辑器的工具,未来版本可能会支持游戏运行模式。
    开发版本: Unity 2018.1.3f1

    相关博客传送门
    一、编辑器开发入门

    二、编辑器的相关特性

    三、自定义Inspector面板

    四、创建编辑器窗体

    五、Gizmos辅助调试工具

    六、扩展Scene视图

    七、数组或list集合的显示方式

    八、EditorPrefs、ScriptableObject、Undo

    九、GUIStyle、GUISkin

    十、AssetPostprocessor资源导入管线

    编辑器开发入门

    编辑器相关文件夹介绍

    1. Editor
    • 该文件夹可以放在项目的任何文件夹下,可以有多个"Editor"文件夹。
    • 编辑器扩展相关的脚本都要放在该文件夹内,该文件夹中的脚本只会对Unity编辑器起作用。
    • 项目打包的时候,不会被打包到项目中。如果编辑器相关脚本不放在该文件夹中,打包项目可能会出错。
    • 如果非要有些编辑器相关脚本不放在该文件夹中,需要在该类的前后加上UNITY_EDITOR的宏定义
    1. Editor Default Resources
    • 该文件夹需要放在Assets根目录下,用来存储编辑器所需要的图片等资源,书写的时候需要注意中间有空格隔开。此文件夹也不会被打包,访问方法为:EditorGUIUtility.Load()
    • 当然,也可以在Editor文件夹内创建一个Resources文件夹,将相关资源放在该文件夹内,通过Resources.Load()获取资源,也是可以的
    1. Gizmos
    • 该文件夹也需要放在Assets根目录下,可以用来存放Gizmos.DrawIcon()的图片资源

    编辑器扩展的命名空间:
    Using UnityEditor

    [MenuItem]

    添加菜单栏按钮

    [MenuItem(“MyTools/test1”,false,priority)]

    • 第一个参数用来表示菜单的路径;
    • 第二个参数用来判断是否是有效函数,是否需要显示;
    • 第三个参数priority是优先级,用来表示菜单按钮的先后顺序,默认值为1000。一般菜单中的分栏,数值相差大于10。
    • 注意需要是静态方法

      例如:[MenuItem(“MyTools/test1”)]
      也可以添加在Unity默认的菜单栏中,例如添加到Window菜单中,[MenuItem(“Window/test2”)],添加到Assets下,[MenuItem(“Assets/Project中的按钮”)]

    实现点击菜单按钮,删除场景或者Project中选中的多个对象

    [MenuItem("MyTool/DeleteAllObj", true)]
    private static bool DeleteValidate()   
    {
        if (Selection.objects.Length > 0)
            return true;
        else
            return false;
    }
    
    [MenuItem("MyTool/DeleteAllObj",false)]
    private static void MyToolDelete()
    {
        //Selection.objects 返回场景或者Project中选择的多个对象
        foreach (Object item in Selection.objects)
        {
            //记录删除操作,允许撤销
            Undo.DestroyObjectImmediate(item);
        }
    } 
    

    DeleteValidate方法是MyToolDelete方法的有效函数,所以第二个参数为true。该有效函数用来判断当前是否选择了对象,如果选择了,返回true,才可以执行MyToolDelete方法。

    添加快捷键

    符号 字符
    % Ctr/Command
    # Shift
    & Alt
    LEFT/Right/UP/DOWN 方向键
    F1-F2 F功能键
    _g 字母g

    例如:[MenuItem(“MyTools/test1 %_q”)] 快捷键 Ctrl+Q

    CONTEXT

    给某组件添加右键菜单选项

    [MenuItem(“CONTEXT/组件名/按钮名”)]
    注意CONTEXT大写

    [MenuItem("CONTEXT/Rigidbody/Init")]
    private static void RigidbodyInit() 
    {
        //TODO
    }
    

    MenuCommand

    用于获取当前操作的组件
    如下,给自定义的组件PlayerHealth添加右键Init按钮

    [MenuItem("CONTEXT/PlayerHealth/Init")]
    static void Init(MenuCommand cmd)
    {
        PlayerHealth health = cmd.contex as PlayerHealth;
    }
    

    ContextMenu、ContextMenuItem

    给某组件添加右边小齿轮菜单选项

    [ContextMenu("FunctionName")]
    public void FunctionName()
    {
        //ToDo
    }
    

    给某属性添加右键菜单选项

    [ContextMenuItem("Handle", "HandleHealth")]
    public float health;
    
    private void HandleHealth()
    {
        //ToDo
    }
    

    P.S. 这两个特性是在UnityEngine命名空间下的,而不像其他[MenuItem]、Selection是在UnityEditor下的。

    Selection

    用于获取选择的游戏物体

    • Selection.activeGameObject 返回第一个选择的场景中的对象
    • Selection.gameObjects 返回场景中选择的多个对象,包含预制体等
    • Selection.objects 返回选择的多个对象
    //遍历选择的对象,并立刻销毁
    foreach(object obj in Selection.objects)
    {
        DestroyImmediate(obj);
    }
    

    P.S. Destroy方法会将删除的对象放在缓存中,缓存满了,才完全删除,而在编辑器未运行的时候,是没有这片缓存的,所以需要用DestroyImmediate(),立刻销毁。当然,可以直接使用Undo.DestroyObjectImmediate()来销毁对象并记录销毁操作

    参考资料

    编辑器特殊文件夹及内置资源读取

    Unity编辑器小教程

    MenuItem和ContextMenu的使用方法

    展开全文
  • Unity编辑器开发(一):准备工作

    万次阅读 多人点赞 2018-02-08 19:11:13
    其实,说到Unity编辑器开发,最大的用途就是用来开发一些实用工具或者说是插件,所涉及到的基本知识也就是Unity最早期的GUI系统的运用,只要对GUI系统运用得炉火纯青,那将自己的工具或者插件做到一流水准也不是不...

    前言

    其实,说到Unity的编辑器开发,最大的用途就是用来开发一些实用工具或者说是插件,所涉及到的基本知识也就是Unity最早期的GUI系统的运用,只要对GUI系统运用得炉火纯青,那将自己的工具或者插件做到一流水准也不是不可以的。

    编辑器的扩展开发,其实最基本的便是掌握对如下三个方法的扩展和使用:
    1、UnityEditor.Editor.OnInspectorGUI()
    2、UnityEditor.Editor.OnSceneGUI()
    3、UnityEditor.EditorWindow.OnGUI()

    OnInspectorGUI

    组件的Inspector窗口GUI显示方法,调用时机:组件挂载的物体被选中,且界面重新绘制时系统自动调用。

    重写自定义组件的Inspector界面

    例:TestEditor类继承至Editor,指向的自定义组件为Test类(由CustomEditor特性指向),则TestEditor重写父类的OnInspectorGUI方法之后,OnInspectorGUI中的内容(主要是GUI控件)将做为Test类在场景挂载后在Inspector窗口的展示界面。

    注意:TestEditor.cs必须放在Editor文件夹内,Test.cs随意。
    这里写图片描述

    代码:

    [CustomEditor(typeof(Test))]
    public class TestEditor : Editor {
        //OnInspectorGUI中的GUI控件将显示在Test类的Inspector窗口
        public override void OnInspectorGUI()
        {
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("This is a test!");
            EditorGUILayout.EndHorizontal();
        }
    }
    

    在场景中选择任意物体挂载Test脚本,选中这个物体,查看Test脚本的Inspector窗口:
    这里写图片描述

    在界面中显示或更新数据

    例:每一个TestEditor类的实例,持有一个Test类的实例(其实就是挂载在场景中的当前选中的物体上的Test组件),在TestEditor类中获取Test类的实例,只需要调用一个从父类继承来的属性,target。

    代码:

    public class Test : MonoBehaviour
    {
        public string Value = "This is a test!";
    }
    
    [CustomEditor(typeof(Test))]
    public class TestEditor : Editor {
    
        private Test _test;
    
        private void OnEnable()
        {
            _test = target as Test;
        }
        public override void OnInspectorGUI()
        {
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label(_test.Value);
            EditorGUILayout.EndHorizontal();
        }
    }
    

    在场景中选择任意物体挂载Test脚本,选中这个物体,查看Test脚本的Inspector窗口:
    这里写图片描述

    OnSceneGUI

    组件的Scene窗口扩展显示方法,调用时机:组件挂载的物体被选中,且界面重新绘制时系统自动调用。

    扩展自定义组件的Scene界面

    OnSceneGUI方法中主要使用Handles系列来绘制可视化调试控件,比如线、盒子、球体、文本等。

    代码:

        public void OnSceneGUI()
        {
            Handles.Label(_test.transform.position, "This is a test!");
        }
    

    在场景中选择任意物体挂载Test脚本,选中这个物体,查看Scene窗口:
    这里写图片描述

    OnGUI

    自定义EditorWindow的GUI显示方法,调用时机:EditorWindow界面重绘时系统自动调用。

    例:新建TestWindow类,继承至EditorWindow,在TestWindow类中实现OnGUI方法。

    注意:TestWindow.cs必须放在Editor文件夹内。
    这里写图片描述

    代码:

    public class TestWindow : EditorWindow {
    
        //注册方法到标题栏:Window/TestWindow
        [MenuItem("Window/TestWindow")]
        private static void Open()
        {
            TestWindow test = GetWindow<TestWindow>();
            test.Show();
        }
    
        private void OnGUI()
        {
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("This is a test window!");
            EditorGUILayout.EndHorizontal();
        }
    }
    

    点击标题栏Window/TestWindow选项,打开一个新的自定义窗口:
    这里写图片描述

    这里写图片描述

    接下来,我们所有的扩展开发很可能都只在这三个方法中进行。

    展开全文
  • Unity开发的游戏, 需要做个关卡编辑器. 如果只是内部用用, 其实直接扩展Unity就够了; 但问题是需要发布给外部的用户使用, 那么总不能把全套资源和Unity发给他们, 所以就诞生了这么个奇葩需求. 技术挑战 既然...

    需求背景

    用Unity开发的游戏, 需要做个关卡编辑器. 如果只是内部用用, 其实直接扩展Unity就够了; 但问题是需要发布给外部的用户使用, 那么总不能把全套资源和Unity发给他们, 所以就诞生了这么个奇葩需求.

    技术挑战

    • 既然用了Unity引擎, 那么渲染肯定还是用Unity, 怎么在外面套一堆UI面板?
    • UI需要使用传统的方式来开发, 什么Qt/Winforms/WPF/Web等, 用Unity内置的UI也是一个思路
    • 游戏内的逻辑基本都在mono虚拟机上跑, 外面再搞一套UI逻辑的话, 怎么做到公共代码的复用?
    • Unity在不改源码的情况下没法直接跟外部的UI框架逻辑互调, 所以需要进程间通信
    • 在跨进程的情况下, 怎么做到比较方便的方法调用和属性编辑?

    GUI框架技术

    Unity渲染窗口

    问题就是怎么把Unity嵌入到现有的一些GUI窗口中? 搜索一下已经有人问过了:
    https://answers.unity.com/questions/871077/how-to-display-unity-scene-in-a-qt-window.html
    https://stackoverflow.com/questions/44059182/embed-unity3d-app-inside-wpf-application
    都是利用了Unity的一个命令行参数”-parentHWND”, 游戏启动后会自动做为子窗口嵌入到指定的HWND窗口中.
    还有另外一个思路, 就是使用类似ActiveX的Web控件技术, 不过这种对于游戏的改动太大, 使用上也有比较多限制, 所认不推荐.
    Unity安装完后在Editor\Data\Documentation\en\uploads\Examples\EmbeddedWindow.zip下面有一个嵌入Winforms的示例, 算是一个很好的开始:
    这里写图片描述

    GUI

    本来想尝试一下使用Web前端技术做UI的, 比如像https://threejs.org/editor/, https://victhorlopez.github.io/editor/, https://webglstudio.org/demo/, https://www.mixamo.com 等, 看起来挺酷, 但是考虑到Unity在Web端的技术限制和游戏代码的共享, 放弃了这个方案, 留给下次做工具时再尝试吧.
    如果是C++项目, 那我会首选Qt, 之前折腾CLI的interop给自己留了下心理阴影…因为Unity游戏的主力语言还是C#, 所以只要选了Qt, 就绕不过interop, 放弃好了.
    然后是WPF, 之前也折腾过一阵子, 虽然看起来很酷, 但是自己想做出那么酷的效果还是要花比较多的精力, 上手成本也是个问题, 编辑器做到差不多的时候总要有其他人来接手维护, 像我几年没用过WPF都忘了怎么写XAML了-_-, 算了, 还是选个最简单的Winforms吧, 完全不需要什么学习成本.

    Docking

    对于一个面板很多的编辑器来说, Docking应该是必备的一个特性, 要不然就像以前的MFC开发的编辑器一样, 一堆Tabs挤在一起…本来WPF那边的选择有很多, 不过放弃WPF后, Winforms这边, 如果不选择商用控件库, 那么最好用的应该就是DockPanel Suite. 不过在找Theme Style相关的方案过程中, 意外发现了个DarkUI, 跟Unity整合一下看起来还不错:
    这里写图片描述
    不过里面的控件类型不是很全, 考虑到后期造轮子的成本, 选择暂时放弃, 后续有需要可以参考它的控件风格实现. 如果只是Docking的话, 还是DockPanel Suite做得更好. 但是对于编辑器来说, 黑色风格的显然看起来更加高大上.

    Property Editor

    每次做编辑器都躲不开做个通用属性编辑, 选择C#也是有这方面的考虑. 想当年用MFC开发编辑器时, 每个参数都加一个控件, 那体验…维护起来简直想死. 后来我就入了.Net Interop的坑, 想来可能仅仅是因为这个PropertyGrid:
    这里写图片描述
    再后来放弃了C#, 参考HeliumProject基于C++搞了一整套反射序列化, 用Qt实现了一个通用的属性编辑器.
    这里写图片描述
    不过这东西想要做到体验好, 还是需要非常多的定制化控件, 而3D游戏的基础数据类型每个引擎的定义都不一样, 很难做成通用的. 有空的还是想基于C++搞一套反射+序列化+GC+属性编辑+脚本绑定的通用库, 这样再做其它的编辑器就很轻松了.
    跑题了, 回到C#这边. WPF能找到的比较不错的属性编辑器大多是商用的:
    这里写图片描述
    开源的做得还不错的有Property Tools, 以前我干过把它嵌入到MFC编辑器里的奇葩事, 这次差一点又想把它嵌入Winforms里用. 之所以没选择它, 那是因为我发现了个更好的: AdamsLair.WinForms, 开源2D引擎Duality背后的一个控件库.
    这里写图片描述
    它自带的编辑器Dualitor已经证明了这个属性编辑控件的强大, 针对不同的游戏引擎的数据类型也已经有一些扩展控件参考:
    这里写图片描述这里写图片描述这里写图片描述

    小结

    Dualitor中除了属性编辑, 其它特性的实现也非常不错, 值得拿来学习. 因为2D引擎没有3D引擎那么复杂, 所以其中的代码逻辑还是比较清晰条理的, 本身的设计理念又跟Unity非常类似, 所以照着它的结构跟Unity又杂交了一下:
    这里写图片描述
    看起来还不错, 结合Winforms的所见即所得的GUI编辑器, 再加上这次也不用折腾Interop了, 算是一个挺不错的开始.


    腾讯云自媒体分享计划: https://cloud.tencent.com/developer/support-plan?invite_code=1lss32a6pqj5w

    展开全文
  • unity 编辑器

    2018-06-27 14:56:33
    详细归纳了unity编辑器扩充原理与应用,并总结成此文档`
  • Unity - MeshMaker超强模型编辑器(一)

    万次阅读 2017-07-17 01:45:56
    前言介于之前第二篇博客MeshVertex(网格编辑器)各种劣质,所以目前借助于其思想升华版(只是思想,实现细节几乎迥异)的MeshMaker诞生了,它实现了以顶点层级、边层级、面层级的网格编辑模式,以及更加高级的针对...

    前言

    介于之前第二篇博客MeshVertex(网格编辑器)各种劣质,所以目前借助于其思想升华版(只是思想,实现细节几乎迥异)的MeshMaker诞生了,它实现了以顶点层级、边层级、面层级的网格编辑模式,以及更加高级的针对顶点层级的删除、克隆、目标无缝焊接等模式。后续的版本中还将会更加完善MeshMaker,期待有兴趣的同学关注。

    性能优化

    • 完全摈弃了MeshVertex所使用的看起来很方便的Sphere球体作为顶点代替物的超级拙劣手段,以鼠标射线投射截取目标面的方式,极致优化使编辑强度不再跟模型顶点数量划勾。
    • 使用自定义数据结构仅在模型网格产生结构性变化时(顶点删除、顶点克隆、顶点焊接)重新组成网格,面结构不再是单纯的只保存它所代表的三个顶点的索引的方式,这种官方的方式会导致进一步编辑的复杂化,以及无关数据的遗漏。
    • 顶点的删除、焊接等操作更加正规(曾经MeshVertex只是假删除),此操作会完全删掉你不想要的顶点,真正意义上的优化网格,而不会存在类似于MeshVertex删除顶点之后的UV丢失,导致贴图丢失。
    • 更加人性化的操作,借助于场景控制柄工具(Tool),可以对任意顶点、边、面进行移动、旋转、缩放等操作。
    • 更加简洁的操作方式,只需要一个MeshMaker脚本,挂载到任意静态模型上便可以进行编辑,所有逻辑非常简单明了的集结在MeshMaker脚本中,极易理解(我一向都是觉得只要能实现我的思路,定义的类越少越好)。

    开始使用

    • 为目标添加MeshMaker脚本(路径添加:Component/模型网格编辑器/MeshMaker)

    顶点编辑

    • MeshMaker支持顶点层级的编辑:
      操作面板

    • 在场景中鼠标悬于目标顶点上,鼠标附近顶点都会高亮提示,显示为高亮颜色(HoverColor),点击鼠标右键以选中当前距离鼠标最近的顶点,显示为高亮颜色(CheckedColor),此时按W键可进入拖拽移动模式,按E键可进入拖拽旋转模式,按R键可进入拖拽缩放模式:
      这里写图片描述

    • MeshMaker支持删除顶点:选中顶点后,点击目标删除按钮,被删除的顶点以及与之关联的所有面都将被完全删掉。
      这里写图片描述

    • MeshMaker支持焊接顶点:选中顶点后,点击目标焊接按钮,同时会在场景中出现进一步选择提示,以选择目标顶点之后,将当前选中顶点焊接至目标顶点,同时当前顶点的所有关联面都会重新指向新的顶点,继而再删掉当前顶点。
      这里写图片描述

    焊接之后:
    这里写图片描述

    • MeshMaker支持克隆顶点:选中顶点后,点击目标克隆按钮,同时会在场景中出现进一步选择提示,以选择参照顶点之后,在当前选中顶点及参照顶点的连线上克隆新的顶点(克隆模式的当前选中顶点与参照顶点必须存在直接连线)。
      这里写图片描述

    克隆之后:
    这里写图片描述

    边编辑

    • MeshMaker支持边层级的编辑:
      这里写图片描述

    • 在场景中鼠标悬于三角边上,鼠标附近的边都会高亮提示,显示为高亮颜色(HoverColor),点击鼠标右键以选中当前距离鼠标最近的边,显示为高亮颜色(CheckedColor),此时按W键可进入拖拽移动模式,按E键可进入拖拽旋转模式,按R键可进入拖拽缩放模式:
      这里写图片描述

    面编辑

    • MeshMaker支持面层级的编辑:
      这里写图片描述

    • 在场景中鼠标悬于三角面上,鼠标附近的面都会高亮提示,显示为高亮颜色(HoverColor),点击鼠标右键以选中当前鼠标位置的面,显示为高亮颜色(CheckedColor),此时按W键可进入拖拽移动模式,按E键可进入拖拽旋转模式,按R键可进入拖拽缩放模式:
      这里写图片描述

    这里写图片描述

    保存Mesh

    • 在编辑完毕之后点击Save Mesh按钮可以保存当前编辑的网格至本地,要使用的话可以直接拖拽给MeshFilter组件。
      这里写图片描述

    结束编辑

    • 点击Edit End按钮以结束编辑,在结束以前请确保你所需要的网格数据已经保存。
      这里写图片描述

    编辑器中层次结构

    • 简单明了的类结构。
      这里写图片描述

    目前的问题

    • 鼠标右键选择会与鼠标右键旋转场景视角冲突。
    • 编辑模式不支持多选。

    源码链接

    [获取源码]

    ------by MeshEditor

    展开全文
  • Unity编辑器

    2019-06-30 23:51:01
    TexturePacker 本文提供全流程,中文翻译。 Chinar 的初衷是将一种简单...助力快速完成 Unity 服务器的购买、配置、以及网站的搭建为初学者节省宝贵的时间,避免采坑! Chinar 教程效果: 文章目录1 Intro...
  • Unity3d编辑器的使用

    千次阅读 2019-06-24 19:24:43
    1.创建工程 第一步:双击Unity3d,点击New 第二步:填写项目信息,注意:工程必须放在空文件夹下 第三步:点击创建 第四步:工程创建完毕 ...或修改后关闭Unity时会提示是否保存工程 ...
  • Unity编辑器小教程

    万次阅读 多人点赞 2016-08-04 19:37:23
    写在前面Unity最强大的地方之一是它扩展性非常强的编辑器。Unite Europe 2016上有一个视频专门讲编辑器编程的: https://www.youtube.com/watch?v=9bHzTDIJX_Q 这里大概记录一下里面的关键点。场景一关注点: 绘制...
  • Unity编辑器扩展-菜单项

    万次阅读 2016-03-08 17:54:41
    Unity编辑器允许你去添加像内置菜单一样外观和行为的自定义菜单。自定义菜单对于那些经常使用的功能提供一种能从编辑器直接访问的便捷方式。在这一课程中我将对每个描述的主题提供真实的使用示例,用于说明在unity中...
  • Unity编辑器扩展-基本界面编写

    千次阅读 2016-10-31 23:40:00
    1.先进行第一步,给编辑器加个菜单: 通过[MenuItem("AXX/BXX")]就可以在编辑器的上边菜单栏增加一个下拉菜单AXX,并增加一个按钮BXX。只要把这句话写在我们定义的函数上方就可以,然后我们点击这个按钮,就会调用这...
  • unity编辑器

    2018-04-20 11:33:50
    打开一个新的项目添加一个项目名称,如果制作3D游戏,点击3D。如果制作的是2D游戏,点击2D。location是你的项目存放的位置,,点击后直接回车就可以创建一个项目节点...属性视图;assert资源管理视图、console视图;...
  • 编辑器扩展总结 工欲善其事必先利其器 引言: 在项目开发中,编辑器扩展为开发者提供了开发自定义工具的功能,让开发者更加便利地使用编辑器开发项目。近期小生一直在学习编辑器扩展的知识,发现网络上关于...
  • 编辑器扩展总结 工欲善其事必先利其器 引言: 在项目开发中,编辑器扩展为开发者提供了开发自定义工具的功能,让开发者更加便利地使用编辑器开发项目。近期小生一直在学习编辑器扩展的知识,发现网络上关于...
  • Unity编辑器拓展【编辑器简介】

    千次阅读 2018-01-31 20:44:48
    为什么要写Unity编辑器Unity本身的功能已经很强大了,但是由于某些项目的特殊需求,需要拓展编辑器来提高工作效率,让程序去代替人工进行一些比较繁琐的操作,减少一些出错的可能性,比如我们可以写一些工具来定制...
  • unity编辑器窗口控件通过EditorGUILayout、EditorGUI、GUILayout和GUI来创建控件和实现布局。 EditorGUILayout、EditorGUI这两个是unity编辑器使用。 而GUILayout和GUI运行时游戏中和编辑器中都可以使用,但是这两...
  • [Unity编辑器]自定义编辑器界面

    千次阅读 2015-03-21 13:58:46
    主要参考了雨松MoMo的Unity3D拓展编辑器系列 编辑器GUI类: 1.GUI、GUILayout 2.EditorGUI、EditorGUILayout 编辑器类(脚本要放在Assets/Editor文件夹中,要使用UnityEditor的命名空间): 1.EditorWindow(重点...
  • 在我们上一篇(Unity编辑器开发(四):实战、开发一个AB包编辑器工具)的结尾,我们拥有了如下图中那样的一个编辑器窗口: 接下来我们来完成最后部分,也就是包括创建AB包,清理AB包,删除AB包,资源打入AB包等...
  • Unity编辑器中何时需要协程当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理。比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种变化过程要经历...
  • Unity 编辑器路径设置输入框

    千次阅读 2016-02-26 20:28:29
    看到一个不错的编辑器路径设置输入框,前后都有文本提示,输入只在中间进行输入。
  • 一、MenuItem 点击My Window时调用Init() 二、RequireComponent 添加脚本A时自动添加刚体组件 三、AddComponentMenu 当按下脚本A时,为当前选择的GameObject添加脚本A...四、ContextMenu

空空如也

1 2 3 4 5 ... 20
收藏数 29,196
精华内容 11,678
关键字:

unity编辑器