1、添加菜單項

Paste_Image.png

Paste_Image.png
using UnityEngine;
using UnityEditor;
public class Tools : MonoBehaviour {
//第一個參數(shù)為路徑,如不存在就主動創(chuàng)建,第二個參數(shù)表示是否為驗證方法,第三個參數(shù)為優(yōu)先級,默認優(yōu)先級為1000,每隔11就會有一條分割線
[MenuItem("Tools/test",false)]
static void Test()
{
print("asd");
}
//快捷鍵為t
[MenuItem("Tools/test1 _t",false,99)]
static void Test1()
{
print("asd1");
}
//快捷鍵為ctrl+t
[MenuItem("Tools/test2 %t",false,999)]
static void Test2()
{
print("asd2");
}
//添加到制定默認菜單位置的菜單項還可以顯示在右擊菜單中,如下可以顯示在Hierarchy面板的右擊菜單中,快捷鍵為shift+t
[MenuItem("GameObject/test3 #t", false, 1)]
static void Test3()
{
print("asd2");
}
//快捷鍵為alt+t
[MenuItem("Assets/test4 &t", false, 1)]
static void Test4()
{
print("asd2");
}
//驗證當只有選中物體的時候才能夠點擊delete按鈕
[MenuItem("Tools/delete", true, 989)]
static bool deleteVaildate()
{
if (Selection.objects.Length > 0)
return true;
else
return false;
}
[MenuItem("Tools/delete", false, 989)]
static void Delete() {
foreach (Object o in Selection.objects)
{
Undo.DestroyObjectImmediate(o);//利用Undo進行的刪除操作可以撤銷。
}
}
}
2、添加指定腳本的右擊菜單

Paste_Image.png

Paste_Image.png
using UnityEngine;
using UnityEditor;
public class EditorTest : MonoBehaviour {
[MenuItem("CONTEXT/Character/method1")] //CONTEXT 組件名 按鈕名
static void InitSpeeed(MenuCommand cmd)
{
//cmd.context正在操作的組件
Character test = (Character)cmd.context;
test.Speed = 10;
}
[MenuItem("CONTEXT/Transform/method2")] //CONTEXT 組件名 按鈕名
static void Inited(MenuCommand cmd)
{
//cmd.context正在操作的組件
Character test = (cmd.context as Transform).GetComponent<Character>();
test.Speed = 0;
}
}
3、創(chuàng)建一個新窗口
圖一:

Paste_Image.png
圖二:

Paste_Image.png
圖三:

Paste_Image.png
窗口腳本:
using UnityEngine;
using System.Collections;
using UnityEditor;
public class CharacterChange :ScriptableWizard {
public int speed = 100;
public const string speedkey = "speed";
[MenuItem("Tools/DisplayCharacterChange", false)]
static void Test()
{
//第一個參數(shù)窗口名(必選,其余可選),第二個參數(shù)按鈕名1(點擊后會自動關(guān)閉,點擊事件函數(shù)OnWizardCreate()),第三個參數(shù)按鈕名字2(點擊后不自動關(guān)閉,點擊事件函數(shù)OnWizardOtherButton())
ScriptableWizard.DisplayWizard<CharacterChange>("修改速度","按鈕1","按鈕2");
}
//窗口啟動時運行
private void OnEnable()
{
speed=EditorPrefs.GetInt(speedkey);
}
//檢測按鈕點擊事件
void OnWizardCreate()
{
GameObject[] enemyPrefabs = Selection.gameObjects;
foreach (GameObject go in enemyPrefabs)
{
Character character = go.GetComponent<Character>();
//記錄修改前的值以便可以撤銷
Undo.RecordObject(character, "change hp");
character.Speed += speed;
}
//可以顯示圖三的提示信息
ShowNotification(new GUIContent(Selection.gameObjects.Length+"個物體被修改了"));
}
//當前字段值改變或窗口剛打開的時候調(diào)用
void OnWizardUpdate()
{
helpString = null;
errorString = null;
if (Selection.gameObjects.Length > 0)
{
//展示圖1提示信息
helpString = "當前選擇了" + Selection.gameObjects.Length + "物體";
}
else
{
//展示圖二錯誤信息
errorString = "至少選擇一個物體";
}
//相對于PlayerPrefs的編輯器模式下持久化儲存的方法,記錄修改
EditorPrefs.SetInt(speedkey, speed);
}
//EditorWindow中繼承的事件
private void OnSelectionChange()
{
OnWizardUpdate();
}
character腳本,掛上后可通過窗口多選,批量修改
using System;
using UnityEngine;
public class Character:MonoBehaviour {
public int Speed;
public int HP;
}