Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Unity

Unity Мультиплатформенный инструмент для разработки игр

Ответ
 
Опции темы
Старый 27.11.2020, 19:44   #1
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 393
Написано 58 полезных сообщений
(для 87 пользователей)
О том как сделать неактивное кастомное меню

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



using UnityEngine;
using UnityEditor;

public class Test : ScriptableObject
{

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

	[MenuItem ("Custom/NonActive", true, 1)]
}
Изображения
Тип файла: png NonActive.PNG (4.2 Кб, 158 просмотров)
(Offline)
 
Ответить с цитированием
Старый 28.11.2020, 15:29   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,566
Написано 3,004 полезных сообщений
(для 5,318 пользователей)
Ответ: О том как сделать неактивное кастомное меню

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

Собственно пример из справки:
// 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;
    } 
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Evgen (29.11.2020)
Старый 29.11.2020, 01:59   #3
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 393
Написано 58 полезных сообщений
(для 87 пользователей)
Ответ: О том как сделать неактивное кастомное меню

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

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

Последний раз редактировалось Evgen, 03.12.2020 в 01:08.
(Offline)
 
Ответить с цитированием
Старый 01.12.2020, 12:35   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,566
Написано 3,004 полезных сообщений
(для 5,318 пользователей)
Ответ: О том как сделать неактивное кастомное меню

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

Сообщение от Evgen Посмотреть сообщение
Ну как вариант можно так:
А тут у тебя нет обработки. Т.е. смысл пункта меню - выполнить какое-то нужное действие, а не просто в его существовании. А валидация нужна для того, чтобы проверить, можно сделать действие или нет.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 03.12.2020, 01:06   #5
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 393
Написано 58 полезных сообщений
(для 87 пользователей)
Ответ: О том как сделать неактивное кастомное меню

Сообщение от pax Посмотреть сообщение
В один вложить нельзя.


А тут у тебя нет обработки. Т.е. смысл пункта меню - выполнить какое-то нужное действие, а не просто в его существовании. А валидация нужна для того, чтобы проверить, можно сделать действие или нет.
Да проверил на практике. Так нельзя.
Зато пришел к выводу нафиг эти менюшки лучше сделать окно с чекбоксами.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com