真Unity3d_Editor扩展工具进阶_自定义按钮_样式_等等

貌似不是很多人在从事Editor的开发

就算是,也只是临时拉过来补位的,并不是真心认同这个工作

很多人面对下面的密密麻麻的插件,第一反应也是吐槽,而如果他自己去开发,也难免这种情况

真Unity3d_Editor扩展工具进阶_自定义按钮_样式_等等_第1张图片

(国内很多人看到这个图都会觉得要是能用中文多好啊,理论上是应该能做到中文,c#里支持中文变量的)

但真心不建议往这个方向做

1.中文坑多,即使是unity3d工程师,他们没做过集成测试的,也不敢保证unity3d全支持中文

2.这是个学习英文的好机会,学习外语的最好方法就是找个NATIVE老外和他对话,但想想你要找个老外和他对话要给多少钱,这里你直接可以通过代码和歪果仁程序猿沟通

所以有了下面这个图

真Unity3d_Editor扩展工具进阶_自定义按钮_样式_等等_第2张图片


但这个博客真心不是英文教学

Editor Inspector如何分组

这个文章是想说Editor编辑器的,这密密麻麻的参数有没办法把他分类了呢??不常用的参数起码得隐藏起来吧

真Unity3d_Editor扩展工具进阶_自定义按钮_样式_等等_第3张图片

这个Filters是怎么做到的捏??

class UniFileBrowser extends MonoBehaviour {

enum SortType {Name, DateNewest, DateOldest}

class FilterSession{
	var filterFiles = false;			// Filter file names by the items in the filterFileExtensions array
	var filterFileExtensions : String[];// When filterFiles is true, show only the files with these extensions
}
var filters:FilterSession;

(虽然是JS,但是C#一样的,就是用class当成group用,把参数包装起来,包装后的调用如下)

public function SetFileExtensions (extensions : String[]) {
    filters.filterFileExtensions = extensions;
	if (extensions == null || extensions.Length == 0) {
		filters.filterFiles = false;
	}
	else {
		filters.filterFiles = true;
	}
	SetupExtensions();
}

原来由只需要调用filterFileExtensions,改为filters.filterFileExtensions即可,内部类的调用方法, unity3d inspector能识别,ok


事件,对象,类,方法的实现


原来很简单,用UnityEvent做变量即可(也可以继承的,所以几乎是无限可能,就看你觉得怎么方便就可以怎么写代码)

using UnityEngine.Events;
public class UploadTextSample : MonoBehaviour, IPointerDownHandler
{
    public UnityEvent onClick;
	
    
}

黑科技X1

一般选中一个Component的话,unity会直接帮你选中它的GameObject。
有时候自己写编辑器的时候对于一些重型组件可能占用的面积比较大,编辑它的时候希望能够专注编辑这一个组件的信息。
此时你可以通过这种方式来选中这个组件,让Inspector只显示一个组件。

真Unity3d_Editor扩展工具进阶_自定义按钮_样式_等等_第4张图片

using UnityEngine;
using System.Collections;

public class L004InspectorSelectComponent : MonoBehaviour {
    
    [ContextMenu("SelectMe")]
    void SelectMe()
    {
        UnityEditor.Selection.objects = new Object[] { this };
    }
}

提示框

真Unity3d_Editor扩展工具进阶_自定义按钮_样式_等等_第5张图片

EditorGUILayout.HelpBox("• To create a new SurfaceType fallback for a texture set, c。。。");

(

如果不懂这个代码怎么用,可能需要先补充点Editor自定义扩展的入门的知识

https://www.cnblogs.com/Firepad-magic/p/5933485.html

)


其实自定义inspector不是太难,看得出UNITY3D的制作团队很用心,很多Editor底层都封装很好,很多API可用

你对比Editor的内核API和那些弱鸡的UNITY3D官网的DOCUMENT就知道了,

在UNITY3D一整个集团里,做宣传和做工具肯定是2组不同的人吗,

本来底层框架也确实可以随便做,反正日常工作嘛,做烂那是分分钟的事,

但明显EDITOR这个团队并没有,

所以,尽可能在你的工作中添加一些自定义和巧思吧,

方便自己,也方便别人,成就他人,也成就自己。。。。。


相关文章:

1)关于自定义Eidtor基础,和inspector custom基础的文章

http://blog.csdn.net/avi9111/article/details/73849319

2)一些简单的 inspector面板自定义可参考:

http://www.360doc.com/content/15/1205/14/25502502_518083734.shtml

3)自定义enum

http://www.manew.com/blog-123323-3516.html

4) 一个国外程序员定义的事件插件,人家觉得默认的定制方向对但是发展速度太慢,等不了,只能自己做

https://forum.unity3d.com/threads/custom-ui-event-system-revamped.353544/


你可能感兴趣的:(每天一点u3d)