Unity編輯器擴(kuò)展(一)

一何鸡、[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官方API
Paste_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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末学歧,一起剝皮案震驚了整個濱河市滤奈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撩满,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绅你,死亡現(xiàn)場離奇詭異伺帘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)忌锯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門伪嫁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偶垮,你說我怎么就攤上這事张咳。” “怎么了似舵?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵脚猾,是天一觀的道長。 經(jīng)常有香客問我砚哗,道長龙助,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任蛛芥,我火速辦了婚禮提鸟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仅淑。我一直安慰自己称勋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布涯竟。 她就那樣靜靜地躺著赡鲜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庐船。 梳的紋絲不亂的頭發(fā)上蝗蛙,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機(jī)與錄音醉鳖,去河邊找鬼捡硅。 笑死,一個胖子當(dāng)著我的面吹牛盗棵,可吹牛的內(nèi)容都是我干的壮韭。 我是一名探鬼主播北发,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喷屋!你這毒婦竟也來了琳拨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤屯曹,失蹤者是張志新(化名)和其女友劉穎狱庇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恶耽,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡密任,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了偷俭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浪讳。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涌萤,靈堂內(nèi)的尸體忽然破棺而出淹遵,到底是詐尸還是另有隱情,我是刑警寧澤负溪,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布透揣,位于F島的核電站,受9級特大地震影響川抡,放射性物質(zhì)發(fā)生泄漏淌实。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一猖腕、第九天 我趴在偏房一處隱蔽的房頂上張望拆祈。 院中可真熱鬧,春花似錦倘感、人聲如沸放坏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淤年。三九已至,卻和暖如春蜡豹,著一層夾襖步出監(jiān)牢的瞬間麸粮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工镜廉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留稚晚,地道東北人辙芍。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓抚垄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寂玲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容