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"); }