Unity Editor拓展编辑器大全

一. 拓展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:表示对应的键

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章