Unity引擎除了提供大部分通用的功能之外,還爲開發者提供了編輯器的擴展開發接口,開發者能夠編寫編輯器腳本,打造適合本身的遊戲輔助工具和定製的編輯器。編輯器
之前腳本開發中使用的一些API和組件類,都屬於運行時類,Unity還提供了編輯器類用於編輯器的擴展開發,包括編輯器環境下使用的GUI類,編輯器工具類,編輯器操做類(例如拖放、撤銷操做)等。工具
注意:編輯器擴展的代碼必須放在「Editor」文件夾下,該文件夾下的代碼在遊戲運行過程當中不會執行,只能在編輯器模式下操做使用。該文件夾的代碼,以及其它任何資源,在打包的時候都不會包括進去。spa
默認: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; } }