1.首先新建C#脚本,命名为MenuItemTool
2.打开MenuItemTool脚本,编写代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class MenuItemTool : MonoBehaviour {
//静态成员是和类一起存在的,有了类就有了静态成员,我们可以通过类来访问静态成员(static)
//非静态成员是和对象一起存在的,有了对象才有非静态成员,非静态成员通过对象来访问
[MenuItem("ClearMemory/ClearALL")]
static void ClearALL()
{
Debug.Log("清除所有缓存");
}
}
3.保存后返回unity界面发现多处一个菜单按钮
点击ClearAll后控制台显示如下:
同时可以扩展多个菜单按钮:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class MenuItemTool : MonoBehaviour {
//静态成员是和类一起存在的,有了类就有了静态成员,我们可以通过类来访问静态成员(static)
//非静态成员是和对象一起存在的,有了对象才有非静态成员,非静态成员通过对象来访问
[MenuItem("ClearMemory/ClearALL")]
static void ClearALL()
{
Debug.Log("清除所有缓存");
}
[MenuItem("ClearMemory/ClearOther")]
static void ClearOther()
{
Debug.Log("清除其它缓存");
}
}
unity中扩展的菜单如下;
4.添加二级菜单
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class MenuItemTool : MonoBehaviour {
//静态成员是和类一起存在的,有了类就有了静态成员,我们可以通过类来访问静态成员(static)
//非静态成员是和对象一起存在的,有了对象才有非静态成员,非静态成员通过对象来访问
[MenuItem("ClearMemory/ClearALL",false,1)]
static void ClearALL()
{
Debug.Log("清除所有缓存");
}
[MenuItem("ClearMemory/ClearOther/ClearShopInfor",false, 2)]
//false代表是否可用,如果改为true就会显示不出来,False就可以在菜单中显示出来
//第三个数字代表优先级
static void ClearShopInfor()
{
Debug.Log("清除商店缓存");
}
[MenuItem("ClearMemory/ClearOther/ClearPropInfor", false, 3)]
static void ClearPropInfor()
{
Debug.Log("清除装备缓存");
}
}
其中false代表是否可用,如果改为true就会显示不出来,False就可以在菜单中显示出来,第三个数字代表优先级,1代表优先级最高。
5.菜单同级的按钮进行分组,优先级的数值要相差11
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class MenuItemTool : MonoBehaviour {
//静态成员是和类一起存在的,有了类就有了静态成员,我们可以通过类来访问静态成员(static)
//非静态成员是和对象一起存在的,有了对象才有非静态成员,非静态成员通过对象来访问
[MenuItem("ClearMemory/ClearOther/ClearShopInfor",false, 12)]
//false代表是否可用,如果改为true就会显示不出来,False就可以在菜单中显示出来
//第三个数字代表优先级
static void ClearShopInfor()
{
Debug.Log("清除商店缓存");
}
[MenuItem("ClearMemory/ClearOther/ClearPropInfor", false, 4)]
static void ClearPropInfor()
{
Debug.Log("清除装备缓存");
}
[MenuItem("ClearMemory/ClearAll", false, 15)]
static void ClearAll()
{
Debug.Log("清除所有缓存");
}
[MenuItem("ClearMemory/ClearGameInfor", false, 26)]
static void ClearGameInfor()
{
Debug.Log("清除游戏缓存");
}
//数字差值为11的时候会自动分组
}
结果:
如果不分组的对比如下:
6.如果想在菜单栏中其他对象下面加按钮
只需增加代码:
[MenuItem("GameObject/Test")]
static void Test()
{
Debug.Log("测试");
}
没有设置优先级时候默认加入到最后面
想把test加入到UI中可以加入优先级
[MenuItem("GameObject/UI/Test", false, 10)]
static void Test()
{
Debug.Log("测试");
}