一文搞懂:【UnityAPI】MenuItem属性

简介: 一文搞懂:【UnityAPI】MenuItem属性

"

参考链接:

0.定义

itemName表示菜单路径

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

priority表示菜单优先级

使用方法:

1 using UnityEditor;

2 using UnityEngine;

3

4 public class TestMenuItem

5 {

6 【MenuItem(""GameObject/Test41"", //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQxODI4MA==.html

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, //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQxOTYzNg==.html

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 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 }


"
image.png
相关文章
|
4月前
|
前端开发 JavaScript
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(二)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
|
4月前
|
存储 JavaScript
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(三)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
|
4月前
|
存储 JavaScript 容器
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(一)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(一)
|
3月前
|
前端开发 JavaScript 程序员
一文搞懂:关于Defferred对象知识详解
一文搞懂:关于Defferred对象知识详解
39 0
|
4月前
|
Java 编译器
还没搞懂重写和重载吗?这篇文章可以帮助你
还没搞懂重写和重载吗?这篇文章可以帮助你
37 1
|
4月前
|
SQL 关系型数据库 MySQL
搞懂connectTimeout和socketTimeout的区别
搞懂connectTimeout和socketTimeout的区别
245 0
对象和类的知识点总结
对象和类的知识点总结
76 0
|
编译器 C++
使用类知识点总结
使用类知识点总结
64 0
|
JavaScript
js基础笔记学习69-枚举对象中得属性
js基础笔记学习69-枚举对象中得属性
69 0
js基础笔记学习69-枚举对象中得属性
|
存储 JavaScript
七个例子带你搞懂JS对象中的数据属性与访问器属性
有人会问:对象属性也分类别?!是指函数和变量的不同吗?还是分为可枚举属性或者是不可枚举属性,其实属性分为两个大类,一种为数据属性,一种为访问器属性
110 0