「Unity3D」(9)自定义编辑器菜单扩展总结

作者: 飞机王 | 来源:发表于2017-12-19 15:33 被阅读87次

    添加菜单

    [MenuItem("Tools/MyOption")]
    private static void MyOption()
    {
        // 自定义菜单Tools
    }
    
    [MenuItem("Tools/Sub/MyOption")]
    private static void MyOption()
    {
        // 子菜单
    }
    
    [MenuItem("Window/AAAOption")]
    private static void MyOption()
    {
        // 添加系统菜单(Window)的菜单项
    }
    

    添加菜单项的快捷键

    • % 代表 Ctrl 或 CMD
    • # 代表 Shift
    • & 代表 Alt
    • LEFT/RIGHT/UP/DOWN 代表方向键
    • F1 ... F2 代表功能键
    • HOME, END, PGUP, PGDN 代表对应按键
    • _[a-z] 代表A-Z字符

    以上每项快捷键可以组合使用,字符单独使用需要‘_’前缀,组合使用不需要‘_’前缀。快捷键冲突不会有提示,只会有一个被启用。

    [MenuItem("Tools/Option1 %#a")]
    private static void MyOption1()
    {
        // CTRL + SHIFT + A
    }
    
    
    [MenuItem("Tools/Option2 %g")]
    private static void MyOption2()
    {
        // CTRL + G
    }
    
    
    [MenuItem("Tools/Option3 _g")]
    private static void MyOption3()
    {
        // G
    }
    

    添加右键上下文菜单,使用内置指定路径

    • Assets/ 工程视图右键菜单
    • Assets/Create/ 工程视图右键Create菜单
    • CONTEXT/ComponentName/ 属性面板对应组件的右键菜单
    [MenuItem("Assets/MyAssetControl")]
    private static void MyAssetControl()
    {
        
    }
    
    [MenuItem("Assets/Create/MyAssetControl")]
    private static void MyAssetControl()
    {
        
    }
    
    [MenuItem("CONTEXT/Rigidbody2D/MyOption")]
    private static void MyOption()
    {
    
    }
    

    菜单禁用控制

    [MenuItem("Tools/Option1")]
    private static void Option1()
    {
        
    }
    
    [MenuItem("Tools/Option1", true)]
    private static bool CheckOption1()
    {
        // 路径相同,返回可用性
        return false;
    }
    

    菜单项的排序与分组

    [MenuItem("Tools/Option1", false, 2)]
    private static void Option1()
    {
    }
    
    [MenuItem("Tools/Option2", false, 1)]
    private static void Option2()
    {
    }
    
    [MenuItem("Tools/Option3", false, 21)]
    private static void Option3()
    {
    }
    

    属性面板组件的右键菜单,获取当前组件

    [MenuItem("CONTEXT/Rigidbody2D/MyOption")]
    private static void MyOption(MenuCommand menuCommand)
    {
        // 获得当前组件对象
        var body2D = menuCommand.context as Rigidbody2D;
    }
    

    自定义组件右键菜单

    • 需要继承MonoBehaviour
    • 不能是static的方法
    [ContextMenu("MyMenu")]
    private void MyMenu()
    {
    }
    

    自定义组件属性的右键菜单

    [ContextMenuItem("Set Name", "SetName")]
    public string myName;
    
    private void SetName()
    {
    }
    

    自定义组件加入组件菜单

    [AddComponentMenu("MyComponent/Enemy")]
    public class Enemy : MonoBehaviour
    {
    }
    

    「扩展很简单」

    相关文章

      网友评论

        本文标题:「Unity3D」(9)自定义编辑器菜单扩展总结

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