一. 拓展Project视图
1. 右键菜单
[MenuItem("Assets/My Tools/Tools 1", false, 2)]
static void MyTools1()
{
Debug.Log(Selection.activeObject.name);
}
2. 拓展布局
[InitializeOnLoadMethod]
static void InitializeOnLoadMethod()
{
EditorApplication.projectWindowItemOnGUI = delegate (string guid, Rect selectionRect) {
//在Project视图中选择一个资源
if (Selection.activeObject &&
guid == AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(Selection.activeObject)))
{
//设置拓展按钮区域
float width = 50f;
selectionRect.x += (selectionRect.width - width);
selectionRect.width = width;
GUI.color = Color.yellow;
//点击事件
if (GUI.Button(selectionRect, "click"))
{
Debug.LogFormat("click : {0}", Selection.activeObject.name);
}
GUI.color = Color.white;
}
};
}
二. 拓展Hierarchy视图
1. 右键菜单
[MenuItem("GameObject/My Create/Cube",false,0)]
static void CreateCube()
{
GameObject.CreatePrimitive (PrimitiveType.Cube); //创建立方体
}
2. 拓展布局
[InitializeOnLoadMethod]
static void InitializeOnLoadMethod()
{
EditorApplication.hierarchyWindowItemOnGUI = delegate (int instanceID, Rect selectionRect) {
//在Hierarchy视图中选择一个资源
if (Selection.activeObject &&
instanceID == Selection.activeObject.GetInstanceID())
{
//设置拓展按钮区域
float width = 50f;
float height = 18f;
selectionRect.x += (selectionRect.width - width);
selectionRect.width = width;
selectionRect.height = height;
GUI.color = Color.yellow;
//点击事件
if (GUI.Button(selectionRect, "click"))
{
Debug.LogFormat("click : {0}", Selection.activeObject.name);
}
GUI.color = Color.white;
}
};
}
三. 拓展Inspector视图
1. 拓展组件
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Camera))]
public class EditorTest : Editor
{
public override void OnInspectorGUI()
{
if (GUILayout.Button("拓展按钮"))
{
}
base.OnInspectorGUI();
}
}
2. 拓展Context菜单
[MenuItem("CONTEXT/Transform/New Context 1")]
public static void NewContext1(MenuCommand command)
{
//获取对象名
Debug.Log(command.context.name);
}
四. 拓展Scene视图
1. 画线或3D物体
using UnityEngine;
public class Test : MonoBehaviour
{
void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
//画线
Gizmos.DrawLine(transform.position, Vector3.one);
//立方体
Gizmos.DrawCube(Vector3.one, Vector3.one);
}
void OnDrawGizmos()
{
Gizmos.DrawSphere(transform.position, 1);
}
}
2. 画GUI
using System.Collections;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Camera))]
public class EditorTest : Editor
{
void OnSceneGUI()
{
Camera camera = target as Camera;
if (camera != null)
{
Handles.color = Color.red;
Handles.Label(camera.transform.position, camera.transform.position.ToString());
Handles.BeginGUI();
GUI.backgroundColor = Color.red;
if (GUILayout.Button("click", GUILayout.Width(200f)))
{
Debug.LogFormat("click = {0}", camera.name);
}
GUILayout.Label("Label");
Handles.EndGUI();
}
}
}
using UnityEngine;
using UnityEditor;
public class EditorTest
{
[InitializeOnLoadMethod]
static void InitializeOnLoadMethod()
{
SceneView.duringSceneGui += delegate (SceneView sceneView) {
Handles.BeginGUI();
GUI.Label(new Rect(0f, 0f, 50f, 15f), "标题");
GUI.Button(new Rect(0f, 20f, 50f, 20f), "click");
Handles.EndGUI();
};
}
}
五. 拓展顶部菜单
1. 带勾选的菜单
[MenuItem("MenuTest/Test", false, 3)]
static void Test3()
{
//勾选中框的菜单
var menuPath = "MenuTest/Test";
bool mchecked = Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, !mchecked);
}
2. 带快捷键的菜单
[MenuItem("Assets/HotKey %#d",false,-1)]
private static void HotKey()
{
Debug.Log ("Command Shift + D");
}
其他快捷键:
%:表示Windows的Ctrl键和macOS下的Command键
#:表示Shift键
&:表示Alt键
LEFT / RIGHT / UP / DOWN:表示四个方向键
HOME / END / PGUP / PGDN:表示对应的键