unity-定制自己的编辑器

unity的两种脚本:
     1.标准脚本(继承MonoBehaviour)
     2.编辑器脚本,运行在编辑器上,需放在Editor文件夹中(继承EditorWindow,EditorUtility,ScriptableWizard,ScriptableObject)
注:ScriptableObject小功能,不需要窗口
       ScriptableWizard :脚本化向导, 继承   EditorWindow当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用。

继承ScriptableWizard类的编辑器的编写:
在编写之前,需要了解的知识点:
自定义窗口的输入:
在继承ScriptableWizard的类中生命的公共属性将被自动检测,在窗口生成对应的输入域。
 ScriptableWizard

ScriptableWizard.DisplayWizard 显示向导

static function DisplayWizard (title : string, klass : System.Type, createButtonName : string = "Create", otherButtonName : string = "") : ScriptableWizard


ScriptableWizard.DisplayWizard("Add Child",typeof(AddChild),"OK");
其中,执行向导类是本身的类。
1.返回所选择的物体(Transform), SelectionMode.TopLevel只会选择最顶层的Transform, 过滤掉 同时被选择了的其他Transform的child。
Transform[] transforms = Selection.GetTransforms(SelectionMode.TopLevel |    SelectionMode.OnlyUserModifiable);  

2.根据标签选择物体
除Object外还有:

一个完整的例子(脚本 MenuTest ),作用是把选中的物体一起放入一个空对象中:
[ MenuItem ( "Example/AddChild" )]
       public string NewParentName;

        public static void Menu AddChild () {//点击菜单后执行
               ScriptableWizard .DisplayWizard(//创建窗口
                     "AddChild",//窗口标题
                     typeof(MenuTest),//执行向导类
                      "ok" );//创建按钮
       }
        void OnWizardCreate() {//创建按钮按下后执行
                          GameObject newChild = new GameObject ( "_Child" );  
              helpString = "This string describes what the Scriptable Wizard does." ;// ScriptableWizard的变量,出现在窗口的帮助字符串
               Transform [] transforms = Selection .GetTransforms( SelectionMode .TopLevel |    SelectionMode .OnlyUserModifiable);//获取所选择的物体
               foreach ( Transform transform in transforms) { //遍历所有物体并放在新创建的父物体中
                     
                     transform.parent = newChild. transform; //
              }
       }
       void OnEnable(){//窗口第一次出现时调用
               helpString = "Welcome" ;
       }
       void OnSelectionChange(){//选择发生改变时调用
              Change ();
       }
       
void Change (){
              helpString =
"" ;
              
if ( Selection .objects != null )
                     helpString =
Selection .objects.Length + "objects selected" ;
              
else
                     helpString = "None" ;
       }
运行结果:



发布了12 篇原创文章 · 获赞 2 · 访问量 6067

猜你喜欢

转载自blog.csdn.net/qq_19533777/article/details/53453868
今日推荐