2016-12-15 2 views
0

Я создаю редактор Unity. У меня есть набор флагов в перечислении:Unity EditorGUILayout.EnumMaskField проблемы, когда первое значение перечисления равно 0

[Flags] 
public enum Flags : int 
{ 
    None = 0x00, 
    First = 0x01, 
    Second = 0x02, 
    Third = 0x04, 
    Fourth = 0x08 
} 

, который я хочу представить в выпадающем списке, в котором пользователь может выбрать более чем один из этих флагов. Я нашел EditorGUILayout.EnumMaskField, и я использую его.

По умолчанию для меня представлены опции «Ничего» и «Все». Я не только не хочу их: они, кажется, создают проблемы для меня, из-за опции «Nothing», которую он предоставляет, 0, а мой собственный параметр «Нет» также равен 0. Удаление флага «Нет» не является вариантом из-за другие причины в приложении, не устанавливая параметр «Нет» для чего-то еще, чем 0.

Я инициализирую выбранные флаги при создании окна из заданного объекта Flags. В объекте Flags, который я ввожу в редактор, флаги «Первый» и «Второй» включены, но когда вызывается EnumMaskField, вместо этого выбираются «None» и «First». Как будто «Нет» будет «первым», а «первым» будет «вторым».

private static Flags myFlags; 

public static MyEditorWindow ShowWindow(Flags flags) 
{ 
    myFlags = flags; 
    ... 
} 

public void OnGUI() 
{ 
    myFlags = (Flags)EditorGUILayout.EnumMaskField("Flags:", myFlags); 
} 

Есть ли способ отключить опции «Ничего» и «Все»?

ответ

0

имеет один и тот же вопрос,

Здесь вы можете найти объяснение, почему так происходит, и решение: https://forum.unity3d.com/threads/editorguilayout-enummaskfield-can-invent-values-for-your-enum.388809/

В вашем случае это может быть решена с помощью этой строки кода:

myFlags = (Flags)((int)(Flags)EditorGUILayout.EnumMaskField("Flags:", (Flags)((int)(myFlags) << 1)) >> 1); 

 Смежные вопросы

  • Нет связанных вопросов^_^