Unity编辑器扩展(第二篇)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kerven_HKW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值