簡(jiǎn)介
在用編輯器開(kāi)發(fā)工具的時(shí)候中贝,我們經(jīng)常會(huì)用到折疊的Foldout舶赔,這里就不對(duì)Foldout做詳細(xì)的介紹了,本文主要分享如何對(duì)Foldout做一個(gè)擴(kuò)展豹缀,筆者在開(kāi)發(fā)中常常需要的一個(gè)右鍵菜單的功能,這樣我們就可以添加很多功能而不需要增加按鈕慨代,右鍵選擇對(duì)應(yīng)的菜單就行了邢笙。
演示
代碼
var rect = GUILayoutUtility.GetRect(EditorGUIUtility.fieldWidth, EditorGUIUtility.fieldWidth, 18f, 18f,
EditorStyles.foldout);
m_IsFoldout = EditorGUI.Foldout(rect, m_IsFoldout, "標(biāo)題");
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;
}