简介
在用编辑器开发工具的时候,我们经常会用到折叠的Foldout,这里就不对Foldout做详细的介绍了,本文主要分享如何对Foldout做一个扩展,笔者在开发中常常需要的一个右键菜单的功能,这样我们就可以添加很多功能而不需要增加按钮,右键选择对应的菜单就行了。
演示
代码
var rect = GUILayoutUtility.GetRect(EditorGUIUtility.fieldWidth, EditorGUIUtility.fieldWidth, 18f, 18f,
EditorStyles.foldout);
m_IsFoldout = EditorGUI.Foldout(rect, m_IsFoldout, "标题");
CreateNewGenericMenu(rect, new List<string> { "方法一", "方法二", "方法三" }, new List<Action>
{
(() => {Debug.LogError("1");}),
(() => {Debug.LogError("2");}),
(() => {Debug.LogError("3");}),
});
/// <summary>
/// 绘制右键菜单
/// </summary>
/// <param name="btnRect"></param>
/// <param name="menuName"></param>
/// <param name="menuIsOn"></param>
/// <param name="menuCallBack"></param>
/// <returns></returns>
public GenericMenu CreateNewGenericMenu(Rect btnRect, List<string> menuName, List<Action> menuCallBack,
List<bool> menuIsOn = null)
{
var menu = new GenericMenu();
var index = 0;
foreach (var action in menuCallBack)
{
menu.AddItem(new GUIContent(menuName[index]), menuIsOn != null && menuIsOn[index],
() => { action?.Invoke(); });
index++;
}
if (Event.current.button == 1 && Event.current.type == EventType.MouseDown &&
btnRect.Contains(Event.current.mousePosition))
{
menu.ShowAsContext();
}
return menu;
}