Unity杂文——编辑器Foldout右键菜单

  1. 简介
  2. 演示
  3. 代码

原文地址

简介

在用编辑器开发工具的时候,我们经常会用到折叠的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;
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 841774407@qq.com

×

喜欢就点赞,疼爱就打赏