版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
}