forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   О том как сделать неактивное кастомное меню (http://forum.boolean.name/showthread.php?t=20868)

Evgen 27.11.2020 19:44

О том как сделать неактивное кастомное меню
 
Вложений: 1
Определяем одно и тоже меню дважды... один раз true другой раз false
и вуаля...



Код:

using UnityEngine;
using UnityEditor;

public class Test : ScriptableObject
{

        [MenuItem ("Custom/NonActive", false, 1)]

        [MenuItem ("Custom/NonActive", true, 1)]
}


pax 28.11.2020 15:29

Ответ: О том как сделать неактивное кастомное меню
 
Еще бы хорошо объяснить, почему так происходит. А дело все в том, что второй атрибут (у которого второй параметр указан как true) должен быть определен у метода, проверяющего можно ли сделать данное действие или нет. Такой метод должен возвращать bool - если true, значит действие можно сделать и пункт меню будет активным, если false - то действие в текущем контексте не применимо (например у выделенного объекта нет какого-либо компонента или этот объект находится в ассетах, а не в сцене).

Собственно пример из справки:
PHP код:

// Validated menu item.
    // Add a menu item named "Log Selected Transform Name" to MyMenu in the menu bar.
    // We use a second function 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 menu item will be disabled if this function returns false.
    
[MenuItem("MyMenu/Log Selected Transform Name"true)]
    static 
bool ValidateLogSelectedTransformName()
    {
        
// Return false if no transform is selected.
        
return Selection.activeTransform != null;
    } 


Evgen 29.11.2020 01:59

Ответ: О том как сделать неактивное кастомное меню
 
Пытался вникнуть, что там за валидейт происходит, теперь понятно.
Получается нужно два метода (или как это назвать в квадратных скобках) делать с одинаковым названием меню... "MyMenu/New Log Selected Transform Name" но можно в одной букве ошибиться и все перестанет работать...

А в один все сложить нельзя?

pax 01.12.2020 12:35

Ответ: О том как сделать неактивное кастомное меню
 
Цитата:

Сообщение от Evgen (Сообщение 317991)
А в один все сложить нельзя?
Пробовал типа так, не работает.

В один вложить нельзя.

Цитата:

Сообщение от Evgen (Сообщение 317992)
Ну как вариант можно так:

А тут у тебя нет обработки. Т.е. смысл пункта меню - выполнить какое-то нужное действие, а не просто в его существовании. А валидация нужна для того, чтобы проверить, можно сделать действие или нет.

Evgen 03.12.2020 01:06

Ответ: О том как сделать неактивное кастомное меню
 
Цитата:

Сообщение от pax (Сообщение 318005)
В один вложить нельзя.


А тут у тебя нет обработки. Т.е. смысл пункта меню - выполнить какое-то нужное действие, а не просто в его существовании. А валидация нужна для того, чтобы проверить, можно сделать действие или нет.

Да проверил на практике. Так нельзя.
Зато пришел к выводу нафиг эти менюшки лучше сделать окно с чекбоксами.


Часовой пояс GMT +4, время: 00:29.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot