新增菜单栏按钮
引入命名空间 Unity.Editor
[MenuItem("xx")]
注意方法要为静态方法
新增菜单栏按钮
引入命名空间 Unity.Editor
[MenuItem("xx")]
注意方法要为静态方法
Menu
快速实现对话框
脚本需要继承ScriptableWizard
在调用时 SciptableWizard
//记录更改可撤销
//按下快门
Undo.RecordObject(更改的属性,“此次操作的的名字”)
//
更改操作的内容
//
分组要差十一
as
[MenuItem("CONTENT/xxx")]
static void Funct(MenuCommand cmd)
{
CurrentComponetType cmp = cmd.content as CurrentComponetType ;
}
MenuCommand 是当前组件
ContexMenu
ContexMenuItem
% = ctrl # = shift & = alt
_ = 单个的字母
undo 类的操作记录可以撤销!
MenuItem第三参数 priority控制先后顺序,默认为1000,相差大于等于11会分组
EditorPrefs保存数据:
保存的是对话框内的属性之前设置的值。
当再次打开对话框的时候,属性中的值还是旧的值,而不是又显示为默认了。
void OnEable()当对话框窗口被初始化出来的时候调用的方法。
EditorPrefs.SetXxx("键名",值);
这个保存之前属性的内容最好在属性被修改的时候保存一下,也就是说在OnWizardUpdate方法中使用,以及OnSelectChange()方法中使用
值可以是Int Double String 之类的。
在OnEable初始化窗口的时候使用GetXxx来设置属性内的值,与PlayerPrefs一样的用法
DisplayWizard有第三个参数,表示第二个按钮,默认是只有一个Create按钮。OtherButton是显示在Create按钮的前面的。
void OnWizardOtherButton() 是第二个按钮的检测方法,这个方法执行完后不会关闭对话框,而Create按钮会关闭对话框
使用Undo.RecordObject(被修改的东西,"记录名称");
这个方法使用在修改这个东西之前使用,因为你要还原的信息是更改之前的信息。
所以这样就可以在对话框按钮事件修改了这个东西后,可以使用ctrl+Z撤销操作了。
ScriptableWizard.DisplayWizard<对话框类名>("标题","按钮名");
对话框类必须继承ScriptableWizard
OnWizardCreate()方法检测对话框里面的按钮事件,当点击这个按钮的时候会执行这个方法,然后会自动关闭这个对话框。
使用Sellection.gameObjects能取得场景中所有被选择的物体和Project文件夹的预制体也会选择。
其实对话框,与脚本之间作联系是要使用到Selection的,对话框类里面的OnWizardCreate方法是关键,使用这个方法根据对话框类设置好的属性来对场景中的一些物体脚本属性进行统一修改,而撤销操作还没成功。
弹出对话框,批量操作 不同于菜单是对话框可以设置参数,进行动态操作,更加灵活,而菜单是一个封装的方法,参数都是固定的
让类要继承于SpritableWizard类,变为对话框类
这个对话框类需要实例化并且显示对话框,所以用一个菜单去实例化
使用SpritableWizard.DisplayWizard<对话框类名>("对话框标题");这样来实例化并且显示出一个对话框,这个对话框里面会有一些属性,这些属性都是对话框类里面的字段或者属性。
里面还有一个按钮,可以给它设置自己的响应方法
【ContextMenu】是一个特性,将一个脚本的方法能够以菜单的形式显示出来,当你右击脚本的时候会有这个方法的菜单按钮,参数是菜单名称。
【ContextMenu】是直接设置有关脚本里面的,也就是你像哪个脚本方法显示出来 ,那就必须要在这个脚本中 对这个方法前面加一个ContextMenu特性。
之前用的MenuItem("CONTEXT/...")这个也能够在脚本弹出菜单里面加一个菜单,而不同的是它这个是利用MenuCommand的context来获取整个脚本组件的,而这里是能够直接访问脚本里面的方法。
[ContextMenuItem]给脚本中的一个属性、字段添加一个菜单,第一个参数是菜单名称,第二个参数是菜单响应的方法,必须要在脚本里面存在这个方法。然后在Unity的Inspector面板选中那个属性或者字段右击,即会弹出一个菜单列表,会看到你自己添加的菜单,点击它会执行菜单对应的方法。
MenuItem的第二个参数,
第一个参数是路径和快捷键,
第二个参数是菜单可用标志位,当true时表示这个特性作用的方法是一个验证方法,当这个方法返回true时,表示该验证方法的实际方法可以使用,反之会禁用那个菜单。
也就是说如果你想要限制一个自己定义的菜单要在特定条件下才可以使用的话,那么就要给这个方法再加一个验证方法,这个验证方法的[MenuItem特性参数都要与这个方法的MenuItem第一个参数和第三个参数一样,除了第二个参数一定要是true.
再次说明:当这个第二个参数是false的时候,表示它不是验证方法,而是普通的菜单方法。当为true的时候,它就是一个对于普通菜单方法的一个验证方法,至于是哪个普通菜单方法 是根据第一个参数和第三个参数决定的。
第三个参数是优先级(菜单排序)
路径 后面加个空格后面要这样写
_X表示直接按X的快捷键
%表示ctrl,%X表示ctrl+X的快捷键,如果快捷键无效可能是输入法问题,要改成英文的
Undo.DestroyObjectImmediate()
Undo撤销类里面的立刻删除物体方法,会先保存要删除的物体,让用户可以用ctrl+z撤销删除操作。