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

MenuItem Constructor

Declaration

public MenuItem(string itemName);
public MenuItem(string itemName, bool isValidateFunction);
public MenuItem(string itemName, bool isValidateFunction, int priority);

Параметры

Параметр Описание
itemName itemName является пунктом меню, представленным как имя пути. Например, пунктом меню может быть "GameObject/Do Something".
isValidateFunction Если isValidateFunction имеет значение true, то это функция проверки и она вызывается до вызывания функции меню с тем же itemName.
приоритетность Порядок отображения элементов меню в меню. Если элемент меню имеет значение приоритета 10 или больше, чем предшествующий ему элемент, то линия разделения разделяет два элемента меню друг от друга в меню.

Описание

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

MenuItem — это атрибут, который указывается перед функцией скрипта. Благодаря ему функция появляется в системе меню Unity. Расположение в меню задаётся значением itemName, переданным в соответствующем аргументе.

Параметр isValidateFunction используется для создания функции MenuItem, которая выполняется перед функцией скрипта с тем же аргументом itemName. Второй аргумент имеет тип boolean. Если ему задано значение true, связанная функция помечается для вызова перед выполнением второй функции скрипта. Затем выполняется вторая функция скрипта с тем же itemName, поэтому именно она выполняется следующей.

Предупреждение: Значение priority учитывается в исполняемой функции только тогда, когда для isValidateFunction задано false. Если для isValidateFunction задано true, чтобы пометить функцию проверки, priority не используется.

Значение priority определяет положение следующей функции скрипта в системе меню. Его целочисленное значение сравнивается со значениями других функций скрипта. Родительские меню получают значение приоритета от первого определённого подменю. Если целочисленное значение больше остальных, функция скрипта MenuItem помещается в конец списка. Значение priority также позволяет объединять функции скрипта в группы. Пример ниже на этой странице подробнее демонстрирует эту возможность.

Следующий пример кода добавляет в меню "Example" три пункта с соответствующими функциями: Example2 (priority 100), Example1 (priority 101), затем Example3 (priority 112). В меню пункт Example3 отделён разделительной линией от двух остальных, поскольку значение priority для Example3 как минимум на 10 больше, чем для Example1.

// Add menu item Example1 into a new menu called Example.
[MenuItem("Example/Example1", false, 101)]
public static void Example1()
{
    Debug.Log("Example/Example1");
}

// Add Example2 to the Example menu. Example2 has a priority lower than Example1, so it is added before Example1 in the menu.
[MenuItem("Example/Example2", false, 100)]
public static void Example2()
{
    Debug.Log("Example/Example2");
}

// Example3 has a priority of 112, which is 11 more than Example1.
// This creates a divider between the two in the menu.
[MenuItem("Example/Example3", false, 112)]
public static void Example3()
{
    Debug.Log("Example/Example3");
}

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

// The Example/SelectionCount menu item is enabled only when you select at least one object.
[MenuItem("Example/SelectionCount", true)]
public static bool SelectionCountValidation()
{
    return Selection.count > 0;
}

// The actual function that is called if the active menu item is selected.
[MenuItem("Example/SelectionCount", false, 200)]
public static void SelectionCountAction()
{
    Debug.Log($"The selection contains {Selection.count} element(s)");
}