Unity Editor自定義菜單排序(MenuItem Order)


擴展Unity的菜單MenuItem

MenuItem 屬性用於向主菜單和檢視面板上下文菜單添加菜單項。

該 MenuItem 屬性能夠將任何靜態函數轉變為菜單命令,僅靜態函數可使用 MenuItem 屬性

我的Unity版本:2019.3.7f1

創建菜單這幾種寫法都是可行

  1. 函數參數有MenuCommand (menuCommand.context是當前菜單選中的對象)
[MenuItem("GameObject/KSFramework/Custom Game Object", false, 10)]
static void CreateCustomGameObject(MenuCommand menuCommand)
{
	GameObject go = new GameObject("Custom Game Object");
	//把新創建的gameobject放在選中節點下
	GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
	// Ctrl+Z可撤銷當前操作
	Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
	Selection.activeObject = go;
}
  1. 普通創建一個菜單
[MenuItem("GameObject/排在系統菜單前(-1)", false, -1)]
public static void GameObjectMenu1()
{
	Debug.Log("hello");
}

菜單排序

使用MenuItem創建菜單時,最后一個字段就是菜單的排序

[MenuItem("GameObject/UI/Image/創建", false, 2001)]
static public void AddImage(MenuCommand menuCommand)
{
	GameObject go = DefaultControls.CreateImage(GetStandardResources());
	PlaceUIElementRoot(go, menuCommand);
	var image = go.GetComponent<img>();
	image.raycastTarget = false;
}
MenuItem(string path, bool isValidateFunction, int priority)

- path 在那個菜單上顯示的,如GameObject/UI/xx ,會在Hierchy的右鍵菜單中顯示
- isValidateFunction 當設置為true時,函數的返回值要為bool。另一個和它用MenuItem標記的相同路徑的方法在調用之前會調用它,根據返回值來驗證方法是否可執行,比如:開啟服務菜單只能點一次,點完之后置灰,需要關閉才能再點擊。
- Priority 菜單的排序

Unity內置菜單排序

Assets菜單的排序優先級

注意:不指定排序,也是在最后面,比如:[MenuItem("Assets/獲取size")]

Unity原生Assets菜單的排序優先級

Assets/Create菜單排序

Assets/Create菜單排序

GameObject菜單排序

GameObject菜單中優先級小於50的,也將出現在Hierarchy的右鍵菜單中

GameObject菜單排序

Window菜單排序

Window菜單排序

其它

自定義AddComponent名字

一般情況下,我們點AddComponent,然后輸入腳本的名字就可以附加上去,當然也可以自定義一個名字,比如

[AddComponentMenu("KSFramework/ActorBase")]
public class ActorBase : MonoBehaviour

自定義AddComponent名字

參考資料

這篇文章非常詳細地講解了菜單項中的排序,包括Unity默認菜單的排序數值,本文的一些圖也是來源於這篇文章 《 Guide to Extending Unity Editor’s Menus


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM