Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键

第四集链接:Unity编辑器扩展-第四集-获取物体的方法_菌菌巧乐兹的博客-CSDN博客

 一、本节目标+效果展示 

1.加入撤回操作

众所周知“撤回是ctrl+z”,但如果你前几集仔细练习了,你会发现一个让你头痛不已的事情,用代码改的东西没法撤回。现在就是,我们搞一下,然后能撤回。

Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第1张图片

2.我们希望,在能操作的时候,他是黑色能点的,如果不能操作,就是灰色不能点的

 Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第2张图片Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第3张图片

 3.加快捷键

Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第4张图片

二、加入撤回操作

我们平时的操作,每一步,都会被程序记录下来,但是我们代码的操作,是不会记录的。所以我们无法撤回。

拿出新的类: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)]
 语言描述就是:名字后面+空格+一个下划线+你喜欢的字母

Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第5张图片

 如果你希望快捷键是shift + 一个字母:

[MenuItem("GameObject/第五集 #p",false,1)]
空格+井号+字母

Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第6张图片

 

  如果你希望快捷键是ctrl + 一个字母:

[MenuItem("GameObject/第五集 %p",false,1)]
空格+百分号+字母

Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第7张图片

   如果你希望快捷键是alt + 一个字母:

[MenuItem("GameObject/第五集 &p",false,1)]

Unity编辑器扩展-第五集-撤回操作/禁止操作/加快捷键_第8张图片

  五、所有代码

这集大可不必了吧。

你可能感兴趣的:(#,Unity编辑器扩展,编辑器,c#,unity)