Unity 6.3
0 онлайн 63 гостей 3 в системе
Вход

MenuItem

класс в UnityEditor

Описание

Атрибут MenuItem позволяет добавлять пункты меню в главное меню и контекстные меню окна Inspector.

MenuItem атрибут превращает любую статическую функцию в команду меню. Использовать MenuItem атрибут.

Для создания горячей клавиши используйте следующие специальные символы:

  • %: Представляет Ctrl на Windows и Linux. Cmd на macOS.
  • ^: Представляет Ctrl на Windows, Linux и macOS.
  • #: Представляет собой смещение.
  • и: представляют собой Альт.

Если не требуются специальные комбинации клавиш модификатора, клавишу можно указать после подчеркивания. Например, чтобы создать меню с горячими клавишами Shift+Alt+G, использование "MyMenu/Do Something #&g". Чтобы создать меню с горячей клавиши G без необходимых модификаторов клавиши, чтобы нажать, использовать "MyMenu/Do Something _g".

Пробел должен предшествовать тексту горячей клавиши. Например, "MyMenu/Do_g" не интерпретируется как горячая клавиша, но "MyMenu/Do _g" 100. Исландия.

Некоторые специальные клавиши клавиатуры поддерживаются как горячие клавиши. Например, "#LEFT" будет отображаться как Shift-Left. Поддерживаемые клавиши таким образом: LEFT, RIGHT, UP, DOWN, F1.. F12, HOME, END, PGUP, PGDN, INS, DEL, BACKSPACE, TAB, и SPACE.

При добавлении пунктов меню в меню "GameObject/" для создания пользовательского GameObjects, обязательно вызовите GameObjectUtility.SetParentAndAlign чтобы убедиться, что новый GameObject правильно восстановлен в случае контекстного клика (см. пример ниже). Ваша функция должна также вызывать Undo.RegisterCreatedObjectUndo чтобы сделать творение невозможным и установить Selection.activeObject к новому объекту. Также обратите внимание: чтобы пункт меню в «GameObject/» появился в раскрывающемся списке Create окна Hierarchy и в контекстном меню Hierarchy, его нужно сгруппировать с другими пунктами меню создания GameObject. Для этого задайте ему приоритет 10 (см. пример ниже). Обратите внимание: из соображений обратной совместимости MenuItems в «GameObject/Create Other» без явно заданного приоритета получат приоритет 10 вместо стандартного 1000. Рекомендуется использовать более информативное имя категории, чем «Create Other», и явно задавать приоритет 10.

Вы можете использовать MenuItem для добавления пунктов меню в контекстное меню правой кнопкой мыши в окне Project. Контекстное меню в окне Project использует те же пункты меню, что и меню Ассеты. Когда вы добавляете пункт меню в меню Ассеты, этот пункт меню также добавляется в контекстное меню в окне Project. Например, "Assets/Do something" добавляет следующее: Do something пункт меню в контекстное меню в окне Project.

Важно: Инициализируйте только открытые поля [MenuItem] через соответствующие параметры конструктора. Изменение этих полей позже может привести к неожиданному поведению. Все недокументированные открытые поля предназначены только для внутреннего использования.

using UnityEditor;
using UnityEngine;

public class MenuTest : MonoBehaviour { // Add a menu item named "Do Something" to MyMenu in the menu bar. [MenuItem("MyMenu/Do Something")] static void DoSomething() { Debug.Log("Doing Something..."); }

// Add a menu item named "Log Selected Transform Name" to MyMenu in the menu bar. // We want this to be validated menu item: an item that is only enabled if specific conditions are met. // To achieve this, we use a second function below to validate the menu item. // so it will only be enabled if we have a transform selected. [MenuItem("MyMenu/Log Selected Transform Name")] static void LogSelectedTransformName() { Debug.Log("Selected Transform is on " + Selection.activeTransform.gameObject.name + "."); }

// Validate the menu item defined by the function above. // The "Log Selected Transform Name" menu item is disabled if this function returns false. // We tell the Editor that this is a validation function by decorating it with a MenuItem attribute // and passing true as the second parameter. // This invokes the MenuItem(string itemName, bool isValidateFunction) attribute constructor // resulting in the function being treated as the validator for "Log Selected Transform Name" menu item. [MenuItem("MyMenu/Log Selected Transform Name", true)] static bool ValidateLogSelectedTransformName() { // Return false if no transform is selected. return Selection.activeTransform != null; }

// Add a menu item named "Do Something with a Shortcut Key" to MyMenu in the menu bar // and give it a shortcut (ctrl-g on Windows, cmd-g on macOS). [MenuItem("MyMenu/Do Something with a Shortcut Key %g")] static void DoSomethingWithAShortcutKey() { Debug.Log("Doing something with a Shortcut Key..."); }

// Add a menu item called "Double Mass" to a Rigidbody's context menu. [MenuItem("CONTEXT/Rigidbody/Double Mass")] static void DoubleMass(MenuCommand command) { Rigidbody body = (Rigidbody)command.context; body.mass = body.mass * 2; Debug.Log("Doubled Rigidbody's Mass to " + body.mass + " from Context Menu."); }

// Add a menu item to create custom GameObjects. // Priority 10 ensures it is grouped with the other menu items of the same kind // and propagated to the hierarchy dropdown and hierarchy context menus. [MenuItem("GameObject/MyCategory/Custom Game Object", false, 10)] static void CreateCustomGameObject(MenuCommand menuCommand) { // Create a custom game object GameObject go = new GameObject("Custom Game Object"); // Ensure it gets reparented if this was a context click (otherwise does nothing) GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); // Register the creation in the undo system Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); Selection.activeObject = go; }

// Add a menu item called "Test" to the Scene view context menu when the // EditorToolContext "TestToolContext" is engaged. [MenuItem("CONTEXT/TestToolContext/Test")] static void TestToolContextItem() { Debug.Log("Testing Test Tool Context Menu Item"); }

// Add a menu item called "Test" to the Scene view context menu when the // EditorTool "TestTool" is engaged. [MenuItem("CONTEXT/TestTool/Test")] static void TestToolItem() { Debug.Log("Testing Test Tool Menu Item"); } }

Свойства

Свойство Описание
menuItemСодержит очистленную ссылку на имя пункта меню в качестве пути.
priorityПорядок отображения пункта меню в меню.
validateЯвляется ли метод, украшенный этим экземпляром атрибута menu item, функцией validate.

Конструкторы

Конструктор Описание
MenuItemСоздаёт пункт меню и вызывает следующую за ним статическую функцию при выборе этого пункта.