1.加入撤回操作
众所周知“撤回是ctrl+z”,但如果你前几集仔细练习了,你会发现一个让你头痛不已的事情,用代码改的东西没法撤回。现在就是,我们搞一下,然后能撤回。
2.我们希望,在能操作的时候,他是黑色能点的,如果不能操作,就是灰色不能点的
3.加快捷键
我们平时的操作,每一步,都会被程序记录下来,但是我们代码的操作,是不会记录的。所以我们无法撤回。
拿出新的类:Undo,这个类里面都是和过程记录有关的东西,但我们今天只讲一个
Undo.RecordObject(记录哪个物体, "给这个操作起个名");
例:
我们之前,批量修改文件名的代码为
[MenuItem("第五集")]
static void ChangeName() {
foreach (GameObject obj in Selection.gameObjects)
{
//这里修改了物体obj的名称
obj.name = obj.transform.GetSiblingIndex().ToString();
}
}
所以我们就希望记住所有obj这个物体的所有修改。
代码变为:
[MenuItem("第五集")]
static void ChangeName() {
foreach (GameObject obj in Selection.gameObjects)
{
//记录物体的方法 //你打算记录哪个物体 //给这个操作随便起个名
Undo.RecordObject(obj, "撤回物体修改");
obj.name = obj.transform.GetSiblingIndex().ToString();
}
}
这样就可以撤回啦。
还记得那些年我们挖了个坑:
这个中间的true和false没有讲。
这里问的是,你到底是个普通的方法还是验证方法,如果填false就是普通方法,之前那样,执行的方法,如果填true,你就是验证普通方法能不能用的方法。
例:我们现在拥有的普通方法是
[MenuItem("GameObject/第五集",false,1)]
static void ChangeName() {
foreach (GameObject obj in Selection.gameObjects)
{
Undo.RecordObject(obj, "撤回物体修改");
obj.name = obj.transform.GetSiblingIndex().ToString();
}
}
但是,我们要对这个方法,进行验证,需求:当Selection.gameObjects的数量大于0的时候,就可以点,其他时候不能点:
//验证方法
//新定了一个方法,但是标签还是之前那个,除了true和false不一样
[MenuItem("GameObject/第五集", true,1)]
//最后返回的是true或者false,所以这里要填bool
//方法名字可以随便起就好
static bool ControlChangeName()
{
//这部分是我们的需求,大于0就显示可以用,其他就显示不能用
if (Selection.gameObjects.Length > 0)
{
return true;
}
else {
return false;
}
}
//普通方法
[MenuItem("GameObject/第五集",false,1)]
static void ChangeName() {
foreach (GameObject obj in Selection.gameObjects)
{
Undo.RecordObject(obj, "撤回物体修改");
obj.name = obj.transform.GetSiblingIndex().ToString();
}
}
我们普通的名字是:
[MenuItem("GameObject/第五集",false,1)]
或者
[MenuItem("GameObject/第五集")]
如果你希望快捷键是一个字母:
[MenuItem("GameObject/第五集 _p",false,1)] 语言描述就是:名字后面+空格+一个下划线+你喜欢的字母
如果你希望快捷键是shift + 一个字母:
[MenuItem("GameObject/第五集 #p",false,1)] 空格+井号+字母
如果你希望快捷键是ctrl + 一个字母:
[MenuItem("GameObject/第五集 %p",false,1)] 空格+百分号+字母
如果你希望快捷键是alt + 一个字母:
[MenuItem("GameObject/第五集 &p",false,1)]
这集大可不必了吧。