一、[MenuItem("--路徑--")]
using UnityEditor;
using UnityEngine;
public class Tools {
[MenuItem("Tools/test/test1")]
static void Test() {
Debug.Log("Test");
}
[MenuItem("Tools/test/test2")]
static void Test2()
{
Debug.Log("Test");
}
}
Paste_Image.png
MenuItem第二個(gè)參數(shù)
MenuItem第二個(gè)參數(shù)表示這個(gè)是否啟用,根據(jù)判斷如果當(dāng)前選擇了游戲物體可使用My deleta按鈕,如果沒(méi)有選擇游戲物體,那么無(wú)法啟用My deleta按鈕 。
[MenuItem("GameObject/My deleta", true, 14)]
static bool MydeletaValidate()
{
if (Selection.objects.Length > 0)
return true;
else
return false;
}
[MenuItem("GameObject/My deleta", false, 14)]
static void Mydeleta()
{
foreach (Object o in Selection.objects) {
//使用Undo.DestroyObjectImmediate進(jìn)行刪除操作 是可以Ctrl+Z進(jìn)行撤銷操作
Undo.DestroyObjectImmediate(o);
}
}
Paste_Image.png
MenuItem第三個(gè)參數(shù)
那么如果我們想做一個(gè)分類讓一類的按鈕分開(kāi)來(lái)如何做呢,
那就是相鄰的兩個(gè)菜單按鈕之間的Priority如果相差11那就相當(dāng)于做了一個(gè)分類。
using UnityEditor;
using UnityEngine;
public class Tools {
//每一個(gè)菜單欄的Priority優(yōu)先級(jí)的默認(rèn)為1000
[MenuItem("Tools/test1",false,1)]
static void Test() {
Debug.Log("Test1");
}
[MenuItem("Tools/test2",false,12)]
static void Test2()
{
Debug.Log("Test2");
}
[MenuItem("Tools/test3", false, 0)]
static void Test3()
{
Debug.Log("Test3");
}
}
Paste_Image.png
如果我們想給腳本右鍵添加一個(gè)按鈕也可以用Menultem.
using UnityEditor;
public class PlayerEditor {
//CONTEXT是固定寫(xiě)法
[MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]
static void InitHealthAndSpeed() {
Debug.Log("Init");
}
}
Paste_Image.png
MenuItem快捷鍵的設(shè)置
那么我們想添加菜單按鈕的快捷鍵如何去做呢,下面我們來(lái)看看,如果我們使用單個(gè)字母按鍵快捷的話我們之間在名字后面加一個(gè)空格分隔開(kāi),再加一個(gè)下劃線然后是我們的快捷字母,如下。
[MenuItem("Tools/test3 _t", false, 0)]
static void Test3()
{
Debug.Log("Test3");
}
按快捷鍵T就可以輸出Text3
Paste_Image.png
那么如果我們想使用Ctrl或者Shift的組合快捷按鍵呢,那就使用下面的方法
//%=Ctrl #=Shift &=alt
[MenuItem("Tools/test1 %q",false,1)]//表示Ctrl+q快捷
static void Test() {
Debug.Log("Test1");
}
Paste_Image.png
二、方法(MenuCommand cmd){}
通過(guò)MenuCommand 去獲取我們正在操作的組件并且更改組件的參數(shù),下面一個(gè)例子設(shè)置剛體的質(zhì)量和useGravity .
//CONTEXT是固定寫(xiě)法,組件名 按鈕名
[MenuItem("CONTEXT/Rigidbody/Clear")]
static void ClearHassAndGravity(MenuCommand cmd) {
//MenuCommand是當(dāng)前正在操作的組件
Rigidbody rgd = cmd.context as Rigidbody;
rgd.mass = 0;
rgd.useGravity = false;
}
點(diǎn)擊Clear的時(shí)候可以看到設(shè)置到改變了
Paste_Image.png
三、Selection的使用
Selection官方APIPaste_Image.png
[MenuItem("Tools/Show info", false, 0)]
static void ShowInfo()
{
Debug.Log(Selection.activeObject.name);//是我們第一個(gè)選擇的游戲物體
Debug.Log(Selection.objects.Length);//獲取選擇的游戲物體的長(zhǎng)度
}
Paste_Image.png
那么我們?nèi)绾稳プ鲆粋€(gè)刪除游戲?qū)ο蟮陌粹o。
[MenuItem("Tools/My deleta", false, 11)]
static void Mydeleta()
{
foreach (Object o in Selection.objects) {
//使用Undo.DestroyObjectImmediate進(jìn)行刪除操作 是可以Ctrl+Z進(jìn)行撤銷操作
Undo.DestroyObjectImmediate(o);
}
}
Paste_Image.png
ContextMenuItem與的使用
在組件腳本的一個(gè)變量上添加一個(gè)按鈕事件
//第一個(gè)參數(shù)為按鈕名字,第二個(gè)參數(shù)為方法名字
[ContextMenuItem("Add Hp","AddHp")]
public int startingHealth = 100; // The amount of health the player starts the game with.
void AddHp()
{
startingHealth = 200;
}
選擇startingHealth并右鍵點(diǎn)擊就會(huì)出現(xiàn)寫(xiě)入的事件按鈕
Paste_Image.png