//--覆盖系统菜单
using UnityEditor;
using UnityEngine;
public class GameObjectUITextMyTools
{
[MenuItem("GameObject/UI/Text")]
static void CreateMyText()
{
Debug.Log("覆盖原有系统的创建Text");
}
//--覆盖原有系统可能会出现黄色警告。
}
按照它的原有菜单路径拼合。
//-------------------------------------------------------------
//--自定义菜单
可以设置路径 排序 勾选框 禁止选中状态等。
using UnityEditor;
using UnityEngine;
public class SelfUseMenuItemMyTools
{
[MenuItem("MyRoot/Test0", false, 0)]
static void Test0()
{
Debug.Log("MyRoot/Test0");
}
[MenuItem("MyRoot/Test1", false, 1)]
static void Test1()
{
Debug.Log("MyRoot/Test1");
}
//--菜单有条件置灰,不可点击
[MenuItem("MyRoot/SelectObjlogName", true, 15)]
static bool SelectObjlogNameBool()
{
if (Selection.activeTransform != null)
{
return true;
}
return false;
}
[MenuItem("MyRoot/SelectObjlogName")]
static void SelectObjlogName()
{
Debug.Log(Selection.activeTransform.name);
}
//--勾选框
[MenuItem("MyRoot/Checked",false,2)]
static void Checked()
{
string menuPath = "MyRoot/Checked";
bool mchecked = Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, !mchecked);
}
}
//-------------------------------------------
//--源生自定义菜单
using UnityEditor;
using UnityEngine;
public class SceneSelfMenuItemMyTools
{
//--在Scene视图中鼠标右键抬起呼出自定义菜单
[InitializeOnLoadMethod]
static void InitializeOnLoadMethod()
{
SceneView.onSceneGUIDelegate = delegate (SceneView sceneView)
{
Event e = Event.current;
if (e != null && e.button == 1 && e.type == EventType.MouseUp)
{
Vector2 mousePosition = e.mousePosition;
var options = new GUIContent[]
{
new GUIContent("text1"),
new GUIContent("text2"),
new GUIContent(),
new GUIContent("text3/001"),
new GUIContent("text3/002"),
};
var selected = -1;
var userData = Selection.activeGameObject;
var width = 100;
var height = 100;
var position = new Rect(mousePosition.x, mousePosition.y - height, width, height);
EditorUtility.DisplayCustomMenu(position, options, selected, delegate (object data, string[] opt, int select)
{
Debug.Log(opt[select]);
}, userData);
e.Use();
}
};
}
}
首先监听鼠标右键以获取鼠标位置,接着使用 EditorUtility.DisplayCustomMenu()方法来弹出自定义菜单,以及监听菜单选择后的事件。
//--------------------------------------------
//--拓展全局自定义快捷键
using UnityEditor;
using UnityEngine;
public class MyHotKeyMyTools
{
[MenuItem("Assets/MyHotKey %#D", false, 20)]
static void MyHotKey()
{
Debug.Log("MyHotKey : Ctrl + Shift + D");
}
}
其他热键:
% : 表示Windows 下的 Ctrl 键和 macOS 下的 Command 键。
# : 表示 Shift 键。
& : 表示 Alt 键。
LEFT/RIGHT/UP/DOWN : 表示左 右 上 下 4个方向键。
F1...F12 : 表示F1至F12菜单键。