Unity編輯器擴展

Unity引擎除了提供大部分通用的功能之外,還爲開發者提供了編輯器的擴展開發接口,開發者能夠編寫編輯器腳本,打造適合本身的遊戲輔助工具和定製的編輯器。編輯器

之前腳本開發中使用的一些API和組件類,都屬於運行時類,Unity還提供了編輯器類用於編輯器的擴展開發,包括編輯器環境下使用的GUI類,編輯器工具類,編輯器操做類(例如拖放、撤銷操做)等。工具

注意:編輯器擴展的代碼必須放在「Editor」文件夾下,該文件夾下的代碼在遊戲運行過程當中不會執行,只能在編輯器模式下操做使用。該文件夾的代碼,以及其它任何資源,在打包的時候都不會包括進去。spa

 

使用MenuItem添加菜單欄按鈕

默認:MenuItem("路徑+按鈕名")     使用默認參數,添加的按鈕默認放在最下面code

using UnityEditor;
using UnityEngine;

public class Tools {
    [MenuItem("Tools/test")]
    static void Test()
    {
        Debug.Log("test");
    }
}

分欄:MenuItem("路徑+按鈕名",false,層級)blog

注意:第二個參數寫false,第三個參數爲層級,越小的越在上面。若是須要分欄效果,那麼兩個按鈕之間至少間隔爲11接口

using UnityEditor;
using UnityEngine;

public class Tools {
    [MenuItem("Tools/test1",false,1)]
    static void Test1()
    {
        Debug.Log("test1");
    }

    [MenuItem("Tools/test2",false,2)]
    static void Test2()
    {
        Debug.Log("test2");
    }

    [MenuItem("Tools/test3",false,13)]
    static void Test3()
    {
        Debug.Log("test3");
    }
}

 

 

給組件的右鍵菜單欄添加按鈕

注意:格式固定  MenuItem("CONTEXT/組件名/按鈕名")遊戲

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class PlayerEditor {

    [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]// CONTEXT 組件名 按鈕名
    static void InitHealthAndSpeed()
    {
        Debug.Log("Init");
    }
}

 

MenuCommand的使用:使用MenuCommand能夠獲取到當前操做的組件資源

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class PlayerEditor {

    [MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]// CONTEXT 組件名 按鈕名
    static void InitHealthAndSpeed(MenuCommand cmd) //MenuCommand是當前正在操做的組件
    {
        //Debug.Log(cmd.context.GetType().FullName);
        CompleteProject.PlayerHealth health = cmd.context as CompleteProject.PlayerHealth;
        health.startingHealth = 200;
        health.flashSpeed = 10;
    }
}

相關文章
相關標籤/搜索