编辑器扩展

Assets==》Editor==》Tools 

public class Tools
{
    //每一个菜单栏的Priority优先级默认1000
    [MenuItem("Tools/Show Info", false, 13)]
    static void ShowInfo()
    {
        Debug.Log(Selection.activeGameObject.name);
    }

    //按钮的验证方法,判断下面的方法是否可以执行,方法名后面加Validate
    [MenuItem("GameObject/my delete", true, 2)]
    static bool MyDeleteValidate()
    {
        if (Selection.objects.Length > 0)
            return true;
        else
            return false;
    }


    //数字与数字之前相差11可以分类
    [MenuItem("GameObject/my delete", false, 2)]
    static void MyDelete()
    {
        foreach (Object o in Selection.objects)
        {
            //按下ctrl+z  可以撤销
            Undo.DestroyObjectImmediate(o);
        }
        //需要把删除操作注册到记录里面
    }

    //快捷键的操作 中间有个空格的间隔+"_"
    //%=ctrl  #=shift  &=alt   操作为: %k
    [MenuItem("Tools/Kuaijie _k", false, 1)]
    static void KuaiJieKey()
    {
        Debug.Log("快捷键");
    }

    [MenuItem("Assets/test4")]
    static void Test5()
    {
        Debug.Log("测试4");
    }


}

 创建对话框,修改多个敌人的数值

using UnityEditor;

public class EnemyChange : ScriptableWizard  
{
    //创建对话框
    [MenuItem("Tools/CreatWizard")]
    static void CreatWizard() 
    {
        //显示对话框,对话框类型,标题
        ScriptableWizard.DisplayWizard<EnemyChange>("统一修改敌人", "ChangeAndClose","Change");
    }

    public int changeHealth = 10;
    public int changeSpeed = 1;

    void OnEnable()
    {
        changeHealth = EditorPrefs.GetInt("Health", changeHealth);
        changeSpeed = EditorPrefs.GetInt("Speed", changeSpeed);
    }

    //检测ChangeAndClose按钮的点击,方法名固定
    void OnWizardCreate()
    {
        GameObject[] enemyPrefabs = Selection.gameObjects;
        //进度条
        EditorUtility.DisplayProgressBar("进度", "0/" + enemyPrefabs.Length + "完成", 0);
        int count = 0;
        foreach (GameObject go in enemyPrefabs)
        {
            CompleteProject.EnemyHealth hp = go.GetComponent<CompleteProject.EnemyHealth>();

            //记录修改的
            Undo.RecordObject(hp, "change heath");

            hp.startingHealth += changeHealth; 
            hp.sinkSpeed += changeSpeed;
            count++;
            EditorUtility.DisplayProgressBar("进度", count + "/" + enemyPrefabs.Length + "完成", count / (float)enemyPrefabs.Length);
        }
        EditorUtility.ClearProgressBar();//关闭进度条
        ShowNotification(new GUIContent(Selection.gameObjects.Length + "个游戏物体被修改了"));
    }

    //Change按钮执行的方法
    void OnWizardOtherButton()
    {
        OnWizardCreate();
    }

    //字段的值发生修改调用
    void OnWizardUpdate()
    {
        errorString = null;
        helpString = null;
        if (Selection.gameObjects.Length > 0)
        {
            helpString = "您当前选择了" + Selection.gameObjects.Length + "个";
        }
        else
        {
            errorString = "请选择至少一个敌人";
        }

        EditorPrefs.SetInt("Health", changeHealth);
        EditorPrefs.SetInt("Speed", changeSpeed);
    }

    //选择的物体发生改变调用
    void OnSelectionChange()
    {
        OnWizardUpdate();
    }
}

创建窗体

 

using UnityEditor;

public class MyWindow : EditorWindow 
{

	[MenuItem("Window/Show mywindow")]
    static void ShowMyWindow()
    {
        MyWindow window = EditorWindow.GetWindow<MyWindow>();
        window.Show();
    }
    private string name = "";
    void OnGUI()
    {
        GUILayout.Label("我的窗口"); 
        name = GUILayout.TextField(name);
        if (GUILayout.Button("创建"))
        {
            GameObject go = new GameObject(name);
            //记录
            Undo.RegisterCreatedObjectUndo(go, "Creat gameobject");
        }
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值