一文搞懂:【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
相关文章
|
C#
C#属性疑惑
疑惑: 这个是自己定义的一个类,调用了MapObjects2对象控件,准备自己写一个属性来存放操作的MapObjectes对象,但是在写这个属性的时候,发现了错误。
631 0
|
Web App开发 JavaScript 程序员
|
9月前
|
前端开发 JavaScript
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(二)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
|
9月前
|
存储 JavaScript 容器
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(一)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(一)
|
9月前
|
存储 JavaScript
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(三)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
|
Java Go C++
一文搞懂参数传递原理(下)
最近一年多的时间陆续接触了一些对我来说陌生的语言,主要就是 Python 和 Go,期间为了快速实现需求只是依葫芦画瓢的撸代码;并没有深究一些细节与原理。 就拿参数传递一事来说各个语言的实现细节各不相同,但又有类似之处;在许多新手入门时容易搞不清楚,导致犯一些低级错误。
|
Java Go Python
一文搞懂参数传递原理(中)
最近一年多的时间陆续接触了一些对我来说陌生的语言,主要就是 Python 和 Go,期间为了快速实现需求只是依葫芦画瓢的撸代码;并没有深究一些细节与原理。 就拿参数传递一事来说各个语言的实现细节各不相同,但又有类似之处;在许多新手入门时容易搞不清楚,导致犯一些低级错误。
|
Java Go Python
一文搞懂参数传递原理(上)
最近一年多的时间陆续接触了一些对我来说陌生的语言,主要就是 Python 和 Go,期间为了快速实现需求只是依葫芦画瓢的撸代码;并没有深究一些细节与原理。 就拿参数传递一事来说各个语言的实现细节各不相同,但又有类似之处;在许多新手入门时容易搞不清楚,导致犯一些低级错误。
|
9月前
|
SQL 关系型数据库 MySQL
搞懂connectTimeout和socketTimeout的区别
搞懂connectTimeout和socketTimeout的区别
434 0
|
SQL 监控 Java
你能搞懂connectTimeout和socketTimeout的区别么?
有时候,由于业务的复杂性,在JVM中拼装一些数据,会造成资源的极大浪费。举个例子,从MySQL中查询出一个List,然后在代码里循环查询数据库,进行一些字段的填充。 这种数据组装方式,除了执行效率的问题,往往会有更多的内存占用,对整个JVM计算节点造成了比较大的压力,有时候甚至造成内存溢出。于是,一些比较牛X的开发人员,使用非常复杂的SQL,来把这些耗时的操作,转嫁给数据库。 可怜的数据库,成了最后一道屏障。谁让数据库的配置普遍都比较高呢?活该。 但是可惜的是,数据库完成这些动作,同样要经历耗时的操作。Java线程等的不耐烦了,就会对用户直接返回超时,懵逼的用户会在这种情况下,再次发起重
908 0

热门文章

最新文章