unity的两种脚本:
1.标准脚本(继承MonoBehaviour)
2.编辑器脚本,运行在编辑器上,需放在Editor文件夹中(继承EditorWindow,EditorUtility,ScriptableWizard,ScriptableObject)
注:ScriptableObject小功能,不需要窗口
继承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.根据标签选择物体
一个完整的例子(脚本
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" ;
}
运行结果: