Editor類和EditorWindow類都繼承自同一個基類:ScriptableObject,他們均可以針對某種腳本類來進行操做
Editor類只能對指定腳本進行擴展,Inspector面板的顯示,或變量在Scene視圖中的可視化ide
使用到的類:
——GUILayout:繪製各類2D控件,好比按鈕、文本、可摺疊列表,以及對它們的分組和排版。這些控件既能夠繪製在Editor類裏,也能夠繪製在EditorWindow裏
——EditorGUILayout:與GUILayout相似,可是提供更多的預約義控件
——GUIUtility:繪製自定義的2D控件,好比進度條、對話框、打開文件夾
——EditorGUIUtility:繪製自定義的2D控件,好比進度條、對話框、打開文件夾
——Handles:繪製3D物體,好比線、面、扇形、方塊、圓錐this
重寫OnSceneGUI方法進行繪製spa
新建一個腳本MyHandles掛載到場景中的任意遊戲物體身上(只有選擇了掛載此腳本的遊戲物體纔會在執行OnSceneGUI方法)
新建場景擴展腳本SceneEditor並獲取到MyHandles對象3d
using UnityEditor; using UnityEngine; [CustomEditor(typeof(MyHandles))] public class SceneEditor : Editor { MyHandles handles; private void OnEnable() { handles = target as MyHandles; } }
——標籤Labelcode
private void OnSceneGUI() { Handles.Label(handles.transform.position, "this is cube"); }
——球形區域RadiusHandleorm
private void OnSceneGUI() { Handles.RadiusHandle(handles.transform.rotation, handles.transform.position, 1); }
——位置軸PositionHandle對象
private void OnSceneGUI() { for (int i = 0; i < handles.trans.Length; i++) { Handles.PositionHandle(handles.trans[i].position, handles.trans[i].rotation); } }
——旋轉軸RotationHandleblog
private void OnSceneGUI() { for (int i = 0; i < handles.trans.Length; i++) { Handles.RotationHandle(handles.trans[i].rotation, handles.trans[i].position); } }
——繪製線段DrawLine繼承
private void OnSceneGUI() { Handles.DrawLine(handles.trans[0].position, handles.trans[1].position); }
——繪製2D控件
在場景窗口中繪製2D控件必須聲明在Handles.BeginGUI()和Handles.EndGUI()內遊戲
private void OnSceneGUI() { Handles.BeginGUI(); GUIWindow(); Handles.EndGUI(); } private void GUIWindow() { GUILayout.Window(1, new Rect(50, 50, 0, 0), id => { GUI.contentColor = Color.white; EditorGUILayout.LabelField("this is window"); EditorGUILayout.ColorField(Color.cyan); EditorGUILayout.Toggle("Toggle", false); GUILayout.Button("Button"); GUI.DragWindow(); }, "Window"); }