真Unity3d_Editor扩展⼯具进阶_⾃定义按钮_样式_等等
前⾔
貌似不是很多⼈在从事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⾃定义扩展的⼊门的知识
)
随便聊聊
其实⾃定义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组不同的⼈吗,
本来底层框架也确实可以随便做,反正⽇常⼯作嘛,做烂那是分分钟的事,
unity3d入门但明显EDITOR这个底层⼯具团队并没有,
所以,尽可能在你的⼯作中添加⼀些⾃定义和巧思吧,
⽅便⾃⼰,也⽅便别⼈,成就他⼈,也成就⾃⼰。。。。。
相关⽂章:
1)关于⾃定义Eidtor基础,和inspector custom基础的⽂章
2)⼀些简单的 inspector⾯板⾃定义可参考(已失效):
3)⾃定义enum
4) ⼀个国外程序员定义的事件插件,⼈家觉得默认的官⽅定制⽅向对但是发展速度太慢,等不了,只能⾃⼰做
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论