【unity 编辑器拓展】


0.对属性进行修饰               //头文件:using UnityEngine ;using UnityEditor;

[SerializeField]                   //序列化,暴露在属性面板,可以编辑,但是私有,不能在脚本中类外面拿到
[HideInInspector]              //在属性面板隐藏

[Header("aaa")]                 //标题栏,上面一行显示字段
[Tooltip("bbb")]                 //提示字段,指向的时候显示

[Space(100)]                      //间隔距离
[Range(0,11)]                     //限制范围

float value1;

[InitializeOnLoadMethod]  //在加载时 调用 对函数和类进行限定 函数必须是 Static
static void InitializeOnLoad()
{

}

[AddComponentMenu("Delegates/Events/EventTimer")] //类前面用 可以把该脚本类 放在 Component 下。

[AddComponentMenu("Delegates/Events/EventTimer")]
public class TimerEvents : MonoBehaviour
{

}

1.菜单栏拓展 [MenuItem]   // 头文件:using UnityEditor;

//菜单名字(必须有子菜单), 是否是 test1 的验证函数(默认不是,即为菜单的执行函数), 优先级(默认1000,两优先级差>10,出现横线)
//Assets 下 Property 的优先级是99998,一般的菜单的优先级是1000(这个是)
    //菜单名字;是否是 test1按钮 的验证函数(如果是false,则说明是按钮的执行函数,true,说明是验证函数);优先级
    //如果错误的写了两个执行函数 会只执行后面的函数,前面的函数被覆盖
    [MenuItem("GameObject/test1", false, 1011)]   
    static void test1()
    {
        Debug.Log("打印test1");
    }
    //菜单名字;是否是 test1 的验证函数 (true,说明是验证函数), 函数的返回值决定该按钮 能否按下/能否执行
    [MenuItem("GameObject/test1", true)]
    static bool test1_Validate()
    {
        return true;//根据返回值,确定是否可以执行 菜单按钮的执行函数
    }
    [MenuItem("GameObject/test2", false)] //必须有子菜单
    static void test2()
    {
        Debug.Log("打印test2");
    } 

2.Scene视图自定义菜单    
SceneView.duringSceneGui += (SceneView) =>{}  // 头文件:using UnityEditor;

   [InitializeOnLoadMethod] //在加载时 调用的方法
    static void InitializeOnLoad()
    {
        //Scene视图屏幕监听事件
        SceneView.duringSceneGui += (SceneView) =>
        {
            if (Event.current != null && Event.current.button == 1 && Event.current.type == EventType.MouseUp)
            {
                //Debug.Log("右键抬起");
                Rect pos = new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y - 100,100,100) ;
                GUIContent[] CONTENTS = new GUIContent[] {new GUIContent("test1") , new GUIContent("XFKT/aaa/test2") };

                //在pos 生成  选项框GUIContent ,默认选中下标1,执行点击的回调函数,用户数据
                EditorUtility.DisplayCustomMenu(pos, CONTENTS,1,(data,opt,select)=>{
                    Debug.LogFormat("data:{0},opt:{1},select:{2},value={3}", data, opt, select, opt[select]);
                },1);
                Event.current.Use();//点击之后不再传递,如果不写 会一直使用鼠标事件
            }
        };
    }

3.快捷键设置   //注意: 带验证函数的子菜单不能添加快捷键

[MenuItem("Assets/test5   &#s", false, 99999)]  

⑴特殊符号:

%-----Window的 CTRL /  MacOS 的 Command
# -----SHIT  
&-----ALT

[MenuItem("Assets/test5   &#s", false, 99999)]  
    static void test5()
    {
        Debug.Log("按下了 ALT + SHIF + S"); 
    }
⑵一般符号

①字母键: A B C D  a b c d 

②数字键: 0 1 2 3 4 5 6 7 8 9

③功能键 :F1、F2、F3 : _F1/_F2_/F3

 [MenuItem("Edit/Active GameObject _F1")]
    static void test6()
    {
        Debug.Log("按下了F1");
    }

④方向键: 上、下、左、右 : _UP/_DOWN/_LEFT/_RIGHT (只能是大写)
 static void test7()
    {
        Debug.Log("按下了 ALT + ↑");
    }
[MenuItem("Assets/test8   _UP", false, 99999)]
    static void test8()
    {
        Debug.Log("按下了   ↑");
    }

*****注意*****:
     除了 特殊键【CTRLE(%) SHIT(#) ALT(&)】 可以任意组合以外(最多可以用三个), 每次  一般键(字母键 数字键 功能键 方向键) 只能选择一种中的一个。
超过一种或者一个 都会导致快捷键失效。
***************

[MenuItem("Assets/test9   _%&UP", false, 99999)]
    static void test9()
    {
        Debug.Log("按下了CTRL+ ALT + ↑");
    }

4.Project视图 拓展 和菜单栏拓展一样,只是父菜单写Assets就好。Property 的优先级是99998,一般的菜单的优先级是1000
[MenuItem("Assets/test5", false, 1011)]   
static void test5()
{
     Debug.Log("Project视图拓展5");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值