CustomEditor使用方式
@[CustomEditor(YouScript)]
這個比較常用,用於對對象界面的擴展,比如一個對象的屬性和方法。
1、創建一個ExampleEditor腳本,在類上添加[CustomEditor(typeof(T))]屬性,重寫OnInspectorGUI方法,用於擴展Inspector。

using UnityEditor; using UnityEngine; [CustomEditor(typeof(Example))] public class ExampleEditor : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); Example _example = target as Example; if (GUILayout.Button("執行Example方法")) { _example.LogError(); } //擴展Inspector } }
target就是你所添加的類型T,需要強轉為你需要的類型。其他的做法與OGUI類似。
2、創建Example腳本,繼承MonoBehaviour,用來掛載到Object上。

using UnityEngine; [ExecuteInEditMode] public class Example : MonoBehaviour { public void LogError() { Debug.LogError("執行Example方法"); } }
Example中添加你需要處理的數據,或者函數。這樣掛載Example在GameObject上,Inspector就可以查看和執行相關的函數了。如果你需要在編輯模式上運行周期函數,還可以在Example上添加[ExecuteInEditMode]屬性。
ExecuteInEditMode使用方式
[ExecuteInEditMode]
我們通常書寫的腳本,並不會定義[ExecuteInEditMode]這個Attribute,所以Awake()和Start()都只有在Runtime中才會執行。給腳本添加[ExecuteInEditMode]特性可以在編輯器模式運行,在ExecuteInEditMode下兩個方法的調用順序和區別。
1:在該MonoBehaviour在編輯器中被賦予給GameObject時,Awake和Start方法會被執行。
2:在Play按鈕被按下開始之后,Awake和Start方法將被執行。
3:在Play按鈕被抬起之后,Awake和Start方法將被執行。
4:在打開含有該MonoBehaviour腳本的場景的時候,Awake和Start將被執行。
MenuItem菜單項使用方式
[MenuItem("MenuName")]
MenuItem屬性允許你添加菜單項到主菜單和檢視面板上下文菜單。
(該屬性把任意靜態函數變為一個菜單命令。僅靜態函數能使用這個MenuItem屬性。)
具體介紹參考:https://blog.csdn.net/qq_33337811/article/details/72852342
AddComponentMenu添加組件菜單項
[AddComponentMenu("")]
在編輯器添加一個用於添加組件的菜單項,將擁有該屬性的腳本添加到選中的物體上。
下面來說說相關的類:
Editor
這個類用於擴展一些編輯器全局的功能.且這個類可以和目標對象作用[CustomEditor(MyScript)];在Editor類里,可以重寫OnInspectorGUI(這個用的比較多的)等方法。
EditorWindow
這個類,用於自定義一個窗口,你可以為窗口添加一些按鈕,選項等。比如,如果你想弄一個任務編輯器,用於配置一些數據。那么直接可以使用該類。
它有一個OnSceneUI的事件可以監聽,可以使你實現像自己的編輯器一樣,在Scene中點擊某個物體后,在鼠標位置顯示一個菜單,或者一些操作按鈕。
另外,還有一個比較適用的事件是OnHierarchyChange。當一個對象的父物體被改變,或者被新建的時候,這個事件會被觸發。
EditorApplication主應用程序類
這個類提供了許多變量的訪問,同時提供了Save等方法。比如,你可以新建一個編輯器腳本,在它的update函數里,進行記事,已做定時保存,從而避免不必要的損失。
這個類還提供了新建場景,打開項目等操作。
如果你是在界面下使用Unity3D,可能這個類的意義不大。但如果你是基於U3D的命令行來構建一個一鍵式多平台發布方案,那么這個類的地位就舉足輕重了。
EditorUtility
提供了很多全局函數,並且多半是靜態的。比如,你想彈出一個打開文件的對話框,或者保存文件的對話框。或者你要查看場景樹中的某個對象enable是與否,都可以通過它來訪問。
在這些編輯類的具體使用上參考:https://blog.csdn.net/qq_33337811/article/category/6785901