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

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

 一、本节目标+效果展示 

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)]

  五、所有代码

这集大可不必了吧。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值