前言
貌似不是很多人在从事Editor的开发
就算是,也只是临时拉过来补位的,并不是真心认同这个工作
很多人面对下面的密密麻麻的插件,第一反应也是吐槽,而如果他自己去开发,也难免这种情况
(国内很多人看到这个图都会觉得要是能用中文多好啊,理论上是应该能做到中文,c#里支持中文变量的)
但真心不建议往这个方向做
1.中文坑多,即使是unity3d工程师,他们没做过集成测试的,也不敢保证unity3d全支持中文
2.这是个学习英文的好机会,学习外语的最好方法就是找个NATIVE老外和他对话,但想想你要找个老外和他对话要给多少钱,这里你直接可以通过代码和歪果仁程序猿沟通
所以有了下面这个图
后语
但这个博客真心不是英文教学
Editor Inspector如何分组
这个文章是想说Editor编辑器的,这密密麻麻的参数有没办法把他分类了呢??不常用的参数起码得隐藏起来吧
这个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只显示一个组件。
using UnityEngine;
using System.Collections;
public class L004InspectorSelectComponent : MonoBehaviour {
[ContextMenu("SelectMe")]
void SelectMe()
{
UnityEditor.Selection.objects = new Object[] { this };
}
}
提示框(Inspector)
EditorGUILayout.HelpBox("• To create a new SurfaceType fallback for a texture set, c。。。");
Editor开发入门知识参考
(
如果不懂这个代码怎么用,可能需要先补充点Editor自定义扩展的入门的知识
https://www.cnblogs.com/Firepad-magic/p/5933485.html
)
随便聊聊
其实自定义inspector不是太难,看得出UNITY3D的制作团队很用心,很多Editor底层都封装很好,很多API可用
其实很多底层都是C++的,很多不懂虚幻和引擎的人以为就只有虚幻是C++
同样多是C++程序,虚幻和UNITY 2个引擎可真的是立见高下
Unity的架构是高很多的,因为把c++用在了架构上,很少的api或者2个模式互相冲突的api都能用相近的调用
知易行难
后台架构做了很多,很多的设计,才能有这样的效果
看看GuiLayout 和 EditorGuiLayout 这2个包就知道什么是架构功力(当然也有不少坑,有些方法只能在Update()调用,也很耗时就是了,但是编辑器用,PC扛得住)
而反观虚幻是一个成熟游戏,用其开发引擎往下改,本来给策划和美术制作用,要改成能符合编辑器用,
如果你说UE4是改成功了那架构能力也确实厉害;可事实就是没有改成功,
工程师做产品,美术牵头技术,有成功的例子吗??
虚幻的C++就是for real time的,其他各种3A特性也是,离我们普通程序员太远
Unity也很多缺点,该有的软件应用的缺点
你对比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/