擴展Unity的選單MenuItem
MenuItem 屬性用于向主選單和檢視面板背景關系選單添加選單項,
該 MenuItem 屬性能夠將任何靜態函式轉變為選單命令,僅靜態函式可使用 MenuItem 屬性
我的Unity版本:2019.3.7f1
創建選單這幾種寫法都是可行
- 函式引數有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;
}
- 普通創建一個選單
[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函式定義
MenuItem(string path, bool isValidateFunction, int priority)
- path 在那個選單上顯示的,如GameObject/UI/xx ,會在Hierchy的右鍵選單中顯示
- isValidateFunction 當設定為true時,函式的回傳值要為bool,另一個和它用MenuItem標記的相同路徑的方法在呼叫之前會呼叫它,根據回傳值來驗證方法是否可執行,比如:開啟服務選單只能點一次,點完之后置灰,需要關閉才能再點擊,
- Priority 選單的排序
Unity內置選單排序
Assets選單的排序優先級
注意:不指定排序,也是在最后面,比如:[MenuItem("Assets/獲取size")]

Assets/Create選單排序

GameObject選單排序
GameObject選單中優先級小于50的,也將出現在Hierarchy的右鍵選單中

Window選單排序

其它
自定義AddComponent名字
一般情況下,我們點AddComponent,然后輸入腳本的名字就可以附加上去,當然也可以自定義一個名字,比如
[AddComponentMenu("KSFramework/ActorBase")]
public class ActorBase : MonoBehaviour

參考資料
這篇文章非常詳細地講解了選單項中的排序,包括Unity默認選單的排序數值,本文的一些圖也是來源于這篇文章 《 Guide to Extending Unity Editor’s Menus》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285786.html
標籤:其他
