unity编辑器的简单扩展

恐怖的6月考试复习月要来了,好久没更博客了,希望这个月结束有一份好的实习,cheer up!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Tools {
    //MenuItem后面引号内是扩展的目录名,1表示优先级不设置默认是1000,优先级相差11会在编辑器那里划根横线表示不是一类
    //给菜单添加快捷键 在路径后面跟一个空格然后写要添加的快捷键
    //%=Ctrl #=shift &=alt 
    [MenuItem("Tools/Test %q", false ,1)]
    static void Test()
    {
        Debug.Log("测试");
    }
    //CONTEXT是在组件那里扩展编辑器,MenuCommand是获取当前组件 
    
    [MenuItem("CONTEXT/PlayerHealth/Init")]
    static void Init(MenuCommand Com)
    {
        Debug.Log(Com.context.name);
    }
    //[ContextMenuItem"",""]可以给属性添加右键菜单

}
/// <summary>
/// 创建类处理弹框批量修改代码 ScriptableWizard 编辑器向导
/// </summary>
public class EditorStudy:ScriptableWizard
{
    [MenuItem ("Tools/Test2")]
    static void Test2()
    {
        //定义弹框的名字
        ScriptableWizard.DisplayWizard<EditorStudy>("弹框:统一修改属性","change","otherButton");
    }
    //修改的属性
    public int Hp = 10;
    public int EXP = 100;

    //弹框被创建之前调用
    void OnEnable()
    {
        Debug.Log("弹框已经被创建");
        //读取上次保存的数据
       Hp= EditorPrefs.GetInt("HP");
       EXP= EditorPrefs.GetInt("EXP");
    }
    /// <summary>
    /// Create按钮的回调方法,点击按钮执行 方法名是固定的
    /// </summary>
    void OnWizardCreate()
    {
        //Selection 对于选中对象的操作
        // Undo.RecordObject(Hp, "HPchange"); 可以撤销操作,相当于保留快照
        GameObject[] testobject = Selection.gameObjects;
        Debug.Log("修改完成");
        //数据持久化保存
        EditorPrefs.SetInt("HP", Hp);
        EditorPrefs.SetInt("EXP", EXP);
       
    }
    // 选择的物体被修改时调用
    void OnWizardUpdate()
    {

    }
    //OtherButton点击不会关闭窗口
    void OnWizardOtherButton()
    {
        Debug.Log("OtherButton");
        ShowNotification(new GUIContent("有值已经被修改了"));
    }
}
/// <summary>
/// 自定义窗口类
/// </summary>
public class CreateWindow:EditorWindow
{
    [MenuItem ("Window/Test3")]
    static void Test3()
    {
        //创建自定义窗口
        CreateWindow window = EditorWindow.GetWindow<CreateWindow>();
        //显示窗口
        window.Show();
    }
    private  string name = "";
    //绘制方法
    void OnGUI()
    {
        //绘制文字
        GUILayout.Label("自定义窗口");
        //绘制输入框
        name = GUILayout.TextField(name);
        //绘制按钮
        if(GUILayout .Button("创建游戏物体"))
        {
            GameObject go = new GameObject(name);
            //注册撤销操作
            Undo.RegisterCreatedObjectUndo(go, "createGO");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35711014/article/details/80571148