一何鸡、[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第二個參數(shù)
MenuItem第二個參數(shù)表示這個是否啟用,根據(jù)判斷如果當(dāng)前選擇了游戲物體可使用My deleta按鈕馅而,如果沒有選擇游戲物體,那么無法啟用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第三個參數(shù)
那么如果我們想做一個分類讓一類的按鈕分開來如何做呢,
那就是相鄰的兩個菜單按鈕之間的Priority如果相差11那就相當(dāng)于做了一個分類玩敏。
using UnityEditor;
using UnityEngine;
public class Tools {
//每一個菜單欄的Priority優(yōu)先級的默認(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
如果我們想給腳本右鍵添加一個按鈕也可以用Menultem.
using UnityEditor;
public class PlayerEditor {
//CONTEXT是固定寫法
[MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]
static void InitHealthAndSpeed() {
Debug.Log("Init");
}
}
Paste_Image.png
MenuItem快捷鍵的設(shè)置
那么我們想添加菜單按鈕的快捷鍵如何去做呢霹娄,下面我們來看看,如果我們使用單個字母按鍵快捷的話我們之間在名字后面加一個空格分隔開,再加一個下劃線然后是我們的快捷字母拣宏,如下沈贝。
[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){}
通過MenuCommand 去獲取我們正在操作的組件并且更改組件的參數(shù),下面一個例子設(shè)置剛體的質(zhì)量和useGravity .
//CONTEXT是固定寫法,組件名 按鈕名
[MenuItem("CONTEXT/Rigidbody/Clear")]
static void ClearHassAndGravity(MenuCommand cmd) {
//MenuCommand是當(dāng)前正在操作的組件
Rigidbody rgd = cmd.context as Rigidbody;
rgd.mass = 0;
rgd.useGravity = false;
}
點擊Clear的時候可以看到設(shè)置到改變了
Paste_Image.png
三宋下、Selection的使用
Selection官方APIPaste_Image.png
[MenuItem("Tools/Show info", false, 0)]
static void ShowInfo()
{
Debug.Log(Selection.activeObject.name);//是我們第一個選擇的游戲物體
Debug.Log(Selection.objects.Length);//獲取選擇的游戲物體的長度
}
Paste_Image.png
那么我們?nèi)绾稳プ鲆粋€刪除游戲?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與的使用
在組件腳本的一個變量上添加一個按鈕事件
//第一個參數(shù)為按鈕名字,第二個參數(shù)為方法名字
[ContextMenuItem("Add Hp","AddHp")]
public int startingHealth = 100; // The amount of health the player starts the game with.
void AddHp()
{
startingHealth = 200;
}
選擇startingHealth并右鍵點擊就會出現(xiàn)寫入的事件按鈕
Paste_Image.png