lyh916

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考链接:

https://blog.csdn.net/qq_33337811/article/details/72852342

https://blog.csdn.net/zxl321365712/article/details/80080586

 

0.定义

itemName表示菜单路径

isValidateFunction表示该方法是否为验证方法

priority表示菜单优先级

使用方法:

 1 using UnityEditor;
 2 using UnityEngine;
 3 
 4 public class TestMenuItem
 5 {
 6     [MenuItem("GameObject/Test41", false)]
 7     private static void Test41()
 8     {
 9         Debug.Log("Test41");
10     }
11 }

 

1.参数itemName

a.与视图的对应关系

Assets->Project视图

GameObject->Hierarchy视图

Componemt->Inspector视图的AddComponent窗口

b.快捷键设置

_w表示字母w

#w表示shift+w

%w表示ctrl+w

&w表示alt+w

直接按快捷键就能调用,支持混合,注意前面要加空格,使用如下:

[MenuItem("GameObject/Test41 %#w", false, 41)]

 

2.参数isValidateFunction

true表示该方法是该菜单项的检测方法,false表示该方法是该菜单项的执行方法,默认为false

在检测方法中,返回true表示该菜单项可以点击,否则不可以点击。如下表示选中一个东西才可以点击

 1 using UnityEditor;
 2 using UnityEngine;
 3 
 4 public class TestMenuItem
 5 {
 6     [MenuItem("GameObject/Test41 %#w", true, 41)]
 7     private static bool Test41ValidateFunc()
 8     {
 9         return Selection.activeObject != null;
10     }
11 
12     [MenuItem("GameObject/Test41 %#w", false, 41)]
13     private static void Test41()
14     {
15         Debug.Log("Test41");
16     }
17 }

 

3.参数priority

表示优先级,越大越后,默认为1000即放最后

a.分割线

当相邻的两个菜单项优先级相差>10时,表示不同组,这时会有分割线

 1 using UnityEditor;
 2 using UnityEngine;
 3 
 4 public class TestMenuItem
 5 {
 6     [MenuItem("GameObject/Test30", false, 30)]
 7     private static void Test30()
 8     {
 9         Debug.Log("Test30");
10     }
11 
12     [MenuItem("GameObject/Test41", false, 41)]
13     private static void Test41()
14     {
15         Debug.Log("Test41");
16     }
17 }

b.相同优先级的情况下,先定义的在前面,不会出现覆盖的情况

c.相同菜单路径的情况下,后定义的会覆盖先定义的。unity内置的菜单项同样也可以被覆盖

d.GameObject/下的菜单项优先级<50的才会显示在Hierarchy视图中

 

4.为组件添加菜单项

使用方法:[MenuItem("CONTEXT/组件名/显示方法名")]

 1 using UnityEditor;
 2 using UnityEngine;
 3 using System.Collections.Generic;
 4 using System.Text;
 5 
 6 public class TestMenuItem
 7 {
 8     [MenuItem("CONTEXT/TestEditorComponent/TestTest")]
 9     private static void TestTest(MenuCommand cmd)
10     {
11         TestEditorComponent comp = cmd.context as TestEditorComponent;
12         List<Transform> traList = comp.traList;
13         StringBuilder stringBuilder = new StringBuilder();
14         for (int i = 0; i < traList.Count; i++)
15         {
16             string temp = string.Format("{0}_{1}", traList[i].gameObject.name, i);
17             stringBuilder.AppendLine(temp);
18         }
19         TextEditor textEditor = new TextEditor();
20         textEditor.text = stringBuilder.ToString();
21         textEditor.OnFocus();
22         textEditor.Copy();
23     }
24 }

posted on 2020-06-07 17:23  艰苦奋斗中  阅读(1581)  评论(1编辑  收藏  举报