一文搞懂:【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
相关文章
|
9月前
|
存储 JavaScript
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(三)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
|
9月前
|
前端开发 JavaScript
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(二)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
|
4月前
|
搜索推荐
用通俗易懂的方式解释一下多态
【10月更文挑战第13天】多态,就像是编程世界里的一场神奇魔术,它让不同的对象在面对相同的操作时,能够展现出各自独特的表现。
43 2
|
9月前
|
存储 JavaScript 容器
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(一)
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下
面试官:请你说一说vuex的五个属性,分别是什么,区别和用途说一下(一)
|
9月前
|
SQL 关系型数据库 MySQL
搞懂connectTimeout和socketTimeout的区别
搞懂connectTimeout和socketTimeout的区别
435 0
|
9月前
|
前端开发
前端知识笔记(四)———深浅拷贝的区别,如何实现?
前端知识笔记(四)———深浅拷贝的区别,如何实现?
74 0
|
编译器 C++
使用类知识点总结
使用类知识点总结
72 0
|
存储 算法 安全
【重学C/C++系列(三)】:这一次彻底搞懂指针和引用
相信学过C++都知道指针以及引用,C++中使用指针是为了兼容C语言,而使用引用是为了更加贯彻面向对象编程思想,今天小余就来和大家聊聊关于C++中指针以及引用。
【重学C/C++系列(三)】:这一次彻底搞懂指针和引用
|
JavaScript 开发者
组件定义方式的复习|学习笔记
快速学习组件定义方式的复习
116 0
组件定义方式的复习|学习笔记