游戲制作到一定階段后,一定會出現一些GameObject的“模板”。比如一個敵人一定會有一個“Enemy Behaviour”、“Box Collider”等。雖然Prefab可以用來作為“預制件”,但是Prefab產生的物體和Prefab自身有關聯,同時還要從Project菜單里去找到Prefab再拖出來。
一個解決方案是擴展編輯器菜單,就像右鍵Hierachry時出現的3D Object、2D Object一樣。可以創造GameObject的菜單有兩個,一個是頂部菜單的GameObject,另一個是Hierachry的右鍵菜單。
在 https://unity3d.com/cn/learn/tutorials/topics/interface-essentials/unity-editor-extensions-menu-items 的文章中提到了如何擴展頂部菜單.
using UnityEngine;
using UnityEditor;
public class MenuItems
{
[MenuItem("Tools/Clear PlayerPrefs")]
private static void NewMenuOption()
{
PlayerPrefs.DeleteAll();
}
}
但是沒有提到Hierachry右鍵菜單的擴展。
在 http://answers.unity3d.com/questions/22947/adding-to-the-context-menu-of-the-hierarchy-tab.html 中的文章提到,Hierachry右鍵菜單其實來自於頂部GameObject的菜單,只是截取了其中的“一段”。如果要擴展,只需要把添加到GameObject菜單的菜單項的優先級設置到這“一段”之間即可。這樣就可以同時出現在GameObject菜單和Hierachry右鍵菜單中了。
public static class Test {
[MenuItem("GameObject/MyMenu/Do Something", priority = 0)]
static void Init() {
Debug.Log("here");
}
}
下圖顯示了兩個菜單中各項的優先度。可以看到只要優先度在0到49之間,就可以同時出現在兩個菜單中。