美文网首页
Unity编辑器扩展(一)

Unity编辑器扩展(一)

作者: _凉笙 | 来源:发表于2017-08-03 11:53 被阅读0次

    一、[MenuItem("--路径--")]

    using UnityEditor;
    using UnityEngine;
    
    public class Tools  {
    
     [MenuItem("Tools/test/test1")]
       static void Test() {
            Debug.Log("Test");
        }
        [MenuItem("Tools/test/test2")]
        static void Test2()
        {
            Debug.Log("Test");
        }
    }
    
    Paste_Image.png
    MenuItem第二个参数

    MenuItem第二个参数表示这个是否启用,根据判断如果当前选择了游戏物体可使用My deleta按钮,如果没有选择游戏物体,那么无法启用My deleta按钮 。

      [MenuItem("GameObject/My deleta", true, 14)]
        static bool MydeletaValidate()
        {
            if (Selection.objects.Length > 0)
                return true;
            else
                return false;
        }
    
        [MenuItem("GameObject/My deleta", false, 14)]
        static void Mydeleta()
        {
            foreach (Object o in Selection.objects) {
                //使用Undo.DestroyObjectImmediate进行删除操作 是可以Ctrl+Z进行撤销操作
                Undo.DestroyObjectImmediate(o);
            }
        }
    
    Paste_Image.png
    MenuItem第三个参数

    那么如果我们想做一个分类让一类的按钮分开来如何做呢,
    那就是相邻的两个菜单按钮之间的Priority如果相差11那就相当于做了一个分类。

    using UnityEditor;
    using UnityEngine;
    
    public class Tools  {
    
     //每一个菜单栏的Priority优先级的默认为1000
     [MenuItem("Tools/test1",false,1)]
       static void Test() {
            Debug.Log("Test1");
        }
        [MenuItem("Tools/test2",false,12)]
        static void Test2()
        {
            Debug.Log("Test2");
        }
    
        [MenuItem("Tools/test3", false, 0)]
        static void Test3()
        {
            Debug.Log("Test3");
        }
    }
    
    Paste_Image.png

    如果我们想给脚本右键添加一个按钮也可以用Menultem.

    using UnityEditor;
    public class PlayerEditor  {
        //CONTEXT是固定写法   
     [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]
       static void InitHealthAndSpeed() {
            Debug.Log("Init");
        }
    }
    
    Paste_Image.png
    MenuItem快捷键的设置

    那么我们想添加菜单按钮的快捷键如何去做呢,下面我们来看看,如果我们使用单个字母按键快捷的话我们之间在名字后面加一个空格分隔开,再加一个下划线然后是我们的快捷字母,如下。

    [MenuItem("Tools/test3 _t", false, 0)]
        static void Test3()
        {
            Debug.Log("Test3");
        }
    

    按快捷键T就可以输出Text3


    Paste_Image.png

    那么如果我们想使用Ctrl或者Shift的组合快捷按键呢,那就使用下面的方法

     //%=Ctrl #=Shift &=alt
     [MenuItem("Tools/test1 %q",false,1)]//表示Ctrl+q快捷
        static void Test() {
            Debug.Log("Test1");
        }
    
    Paste_Image.png

    二、方法(MenuCommand cmd){}

    通过MenuCommand 去获取我们正在操作的组件并且更改组件的参数,下面一个例子设置刚体的质量和useGravity .

    //CONTEXT是固定写法,组件名 按钮名
        [MenuItem("CONTEXT/Rigidbody/Clear")]
        static void ClearHassAndGravity(MenuCommand cmd) {
        //MenuCommand是当前正在操作的组件  
            Rigidbody rgd = cmd.context as Rigidbody;
            rgd.mass = 0;
            rgd.useGravity = false;
        }
    

    点击Clear的时候可以看到设置到改变了


    Paste_Image.png

    三、Selection的使用

    Selection官方API Paste_Image.png
       [MenuItem("Tools/Show info", false, 0)]
        static void ShowInfo()
        {
            Debug.Log(Selection.activeObject.name);//是我们第一个选择的游戏物体
            Debug.Log(Selection.objects.Length);//获取选择的游戏物体的长度
        }
    
    Paste_Image.png

    那么我们如何去做一个删除游戏对象的按钮。

    [MenuItem("Tools/My deleta", false, 11)]
        static void Mydeleta()
        {
            foreach (Object o in Selection.objects) {
                //使用Undo.DestroyObjectImmediate进行删除操作 是可以Ctrl+Z进行撤销操作
                Undo.DestroyObjectImmediate(o);
            }
        }
    
    Paste_Image.png

    ContextMenuItem与的使用

    在组件脚本的一个变量上添加一个按钮事件

    //第一个参数为按钮名字,第二个参数为方法名字
            [ContextMenuItem("Add Hp","AddHp")]
            public int startingHealth = 100;                            // The amount of health the player starts the game with.
            void AddHp()
            {
                startingHealth = 200;
            }
    

    选择startingHealth并右键点击就会出现写入的事件按钮


    Paste_Image.png

    相关文章

      网友评论

          本文标题:Unity编辑器扩展(一)

          本文链接:https://www.haomeiwen.com/subject/ckyelxtx.html