UnityEditor(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010476348/article/details/78845430
最近学习了一下UnityEditor编程,废话不多说,看代码把,注释写的很详细
using UnityEditor;
using UnityEngine;

public class Tools
{
    [MenuItem("GameObject/TestOne", false,10)]
    static void TestOne()
    {
        //Selection.activeGameObject 返回当前选择的物体
        Debug.LogError(Selection.activeGameObject.name);
        Debug.LogError(Selection.objects.Length);
    }

    [MenuItem("Assets/TestTwo", false, 10)]
    static void TestTwo()
    {
        Debug.LogError("TestTwo");
    }

    [MenuItem("CONTEXT/PlayerData/TestThree")]// CONTEXT /组件名 /fun name
    static void TestThree(MenuCommand mcmd)//MenuCommand是当前正在操作的组件对象
    {
        PlayerData playerData = mcmd.context as PlayerData;
        playerData.a += 1;
        Debug.LogError("TestThree");
    }
    /// <summary>
    /// 判断按钮是否启用
    /// </summary>
    /// <returns></returns>
    [MenuItem("GameObject/MyDelete %t", true, 11)]
    static bool MyDeleteValidate()
    {
        if (Selection.objects.Length > 0)
            return true;
        else
            return false;
    }
    //快捷键设置
    // %=ctrl #=shift &=alt
    [MenuItem("GameObject/MyDelete %t",false,11)]
    static void MyDelete()
    {
        foreach (Object item in Selection.objects)
        {
            //可以取消的删除操作
            Undo.DestroyObjectImmediate(item);
        }
    }
   


}

using UnityEngine;
using UnityEditor;

public class ChangeWindow : ScriptableWizard
{

    [MenuItem("Tools/CreateWizard")]
    static void CreateWizard()
    {
        ScriptableWizard.DisplayWizard<ChangeWindow>("修改数值", "Change and Close", "Change");

    }

    public int changeValue = 10;
    private const string changeValueKey = "ChangeWindow.changeValue";
    private void OnEnable()
    {
        //EditorPrefs.DeleteAll();//EditorPrefs.DeleteAll()会删除unity系统设置的一些存储,慎用!!
        changeValue = EditorPrefs.GetInt(changeValueKey, changeValue);
    }

    void OnWizardOtherButton()
    {
        ChangeValues();
    }
    /// <summary>
    /// 检测Create按钮的点击
    /// </summary>
    void OnWizardCreate()
    {
        ChangeValues();

        Debug.LogError("Value:" + changeValue);
    }

    private void ChangeValues()
    {
        GameObject[] SelectedObjects = Selection.gameObjects;

        foreach (GameObject go in SelectedObjects)
        {
            PlayerData data = go.GetComponent<PlayerData>();
            Undo.RecordObject(data, "Change Values");//可以恢复ctrl+z
            data.a += changeValue;
            data.b += changeValue;
            data.c += changeValue;

        }
        ShowNotification(new GUIContent("改变了" + SelectedObjects.Length + "个物体的值"));
    }

    void OnWizardUpdate()
    {
        ShowMessages();
        EditorPrefs.SetInt(changeValueKey, changeValue);
    }
    /// <summary>
    /// 当选择物体发生改变时
    /// </summary>
    void OnSelectionChange()
    {
        ShowMessages();
    }
    
    void ShowMessages()
    {
        helpString = null;
        errorString = null;

        if (Selection.gameObjects.Length > 0)//Selection.gameObject为当前选择的游戏物体
        {
            helpString = "当前选择了" + Selection.gameObjects.Length + "个物体";
        }
        else
        {
            errorString = "请至少选择一个物体";
        }
    }
}
using UnityEngine;

public class PlayerData : MonoBehaviour {

    public int a = 0;
   
    public int b = 0;
    [ContextMenuItem("Add Num", "AddNum")]//添加右键执行方法
    public int c = 0;


    void AddNum()
    {
        c += 1;
    }
    [ContextMenu("SetNum")]//右键类名可执行方法
    void SetNum()
    {
        b += 1;
    }
}





    

猜你喜欢

转载自blog.csdn.net/u010476348/article/details/78845430