1. 程式人生 > >「Unity3D」(9)自定義編輯器選單擴充套件總結

「Unity3D」(9)自定義編輯器選單擴充套件總結

新增選單

[MenuItem("Tools/MyOption")]
private static void MyOption()
{
    // 自定義選單Tools
}

[MenuItem("Tools/Sub/MyOption")]
private static void MyOption()
{
    // 子選單
}

[MenuItem("Window/AAAOption")]
private static void MyOption()
{
    // 新增系統選單(Window)的選單項
}

新增選單項的快捷鍵

  • % 代表 Ctrl 或 CMD
  • # 代表 Shift
  • & 代表 Alt
  • LEFT/RIGHT/UP/DOWN 代表方向鍵
  • F1 … F2 代表功能鍵
  • HOME, END, PGUP, PGDN 代表對應按鍵
  • _[a-z] 代表A-Z字元

以上每項快捷鍵可以組合使用,字元單獨使用需要‘_’字首,組合使用不需要‘_’字首。快捷鍵衝突不會有提示,只會有一個被啟用。

[MenuItem("Tools/Option1 %#a")]
private static void MyOption1()
{
    // CTRL + SHIFT + A
}


[MenuItem("Tools/Option2 %g")]
private static void MyOption2()
{
    // CTRL + G
} [MenuItem("Tools/Option3 _g")] private static void MyOption3() { // G }

新增右鍵上下文選單,使用內建指定路徑

  • Assets/ 工程檢視右鍵選單
  • Assets/Create/ 工程檢視右鍵Create選單
  • CONTEXT/ComponentName/ 屬性面板對應元件的右鍵選單

[MenuItem("Assets/MyAssetControl")]
private static void MyAssetControl()
{

}

[MenuItem("Assets/Create/MyAssetControl"
)] private static void MyAssetControl() { }

[MenuItem("CONTEXT/Rigidbody2D/MyOption")]
private static void MyOption()
{

}

選單禁用控制

[MenuItem("Tools/Option1")]
private static void Option1()
{

}

[MenuItem("Tools/Option1", true)]
private static bool CheckOption1()
{
    // 路徑相同,返回可用性
    return false;
}

選單項的排序與分組

[MenuItem("Tools/Option1", false, 2)]
private static void Option1()
{
}

[MenuItem("Tools/Option2", false, 1)]
private static void Option2()
{
}

[MenuItem("Tools/Option3", false, 21)]
private static void Option3()
{
}

屬性面板元件的右鍵選單,獲取當前元件

[MenuItem("CONTEXT/Rigidbody2D/MyOption")]
private static void MyOption(MenuCommand menuCommand)
{
    // 獲得當前元件物件
    var body2D = menuCommand.context as Rigidbody2D;
}

自定義元件右鍵選單

  • 需要繼承MonoBehaviour
  • 不能是static的方法

[ContextMenu("MyMenu")]
private void MyMenu()
{
}

自定義元件屬性的右鍵選單

[ContextMenuItem("Set Name", "SetName")]
public string myName;

private void SetName()
{
}

自定義元件加入元件選單

[AddComponentMenu("MyComponent/Enemy")]
public class Enemy : MonoBehaviour
{
}

「擴充套件很簡單」