У меня есть два перечисления.
Первым является PrimaryColor, который может быть "Red, Yellow или Blue"
Вторым является TertiaryColor, который может быть "Red, Magenta, Purple, Violet, Синий и т. Д. "
Я хочу, чтобы мой пользовательский инспектор отображал только подмножество возможных значений для второго перечисления на основе значения первого перечисления. Поэтому, если бы это был Синий, я бы хотел, чтобы пользователь мог выбирать из «фиолетовый, фиолетовый, бирюзовый, пурпурный, синий», но не красный / оранжевый / и т. Д.
Я обнаружил, что есть вариантв инспекторе «checkEnabled», который звучит так, как будто он идеально подходит для этого:
https://docs.unity3d.com/ScriptReference/EditorGUILayout.EnumPopup.html
Однако я не могу его скомпилировать при попытке использовать это поле.
Может ли кто-нибудь дать мне пример того, как использовать поле checkEnabled в EnumPopUp для этого? Я могу заставить метод enumPopup нормально работать с базовыми параметрами, передавая ему строку и перечисление, однако, когда я пытаюсь передать ему метод пользовательской функции, он говорит, что все параметры не могут быть преобразованы в GUIlayoutoptions.
//The variation of the method I am attempting to run
public static Enum EnumPopup(GUIContent label, Enum selected, Func<Enum,bool> checkEnabled,
bool includeObsolete, params GUILayoutOption[] options);
MyColor myColor = (MyColor)target;
Func<TertiaryColorEnum, bool> showEnumValue = ShowEnumValue;
GUIContent label = new GUIContent("Color");
//this call gives me a red line under every paramater even though they should all be what it needs
myColor.tertiaryColor = (TertiaryColorEnum)EditorGUILayout.EnumPopup(label, myColor.tertiaryColor,
showEnumValue, true);
//these ones work just fine (other parameter sets for the method)
myColor.tertiaryColor = (TertiaryColorEnum)EditorGUILayout.EnumPopup(myColor.tertiaryColor);
myColor.tertiaryColor = (TertiaryColorEnum)EditorGUILayout.EnumPopup("hi", myColor.tertiaryColor);
myColor.tertiaryColor = (TertiaryColorEnum)EditorGUILayout.EnumPopup(label, myColor.tertiaryColor);
// my custom function
public static bool ShowEnumValue(TertiaryColorEnum tertiaryColorEnum)
{
if(myColor.primaryColor == PrimaryColorEnum.Red)
{
if(tertiaryColorEnum == TertiaryColorEnum.Purple)
return false;
else
return true;
}
}
Мое лучшее предположение, что я делаю что-то не так с требуемым параметром Func, но я не понимаю, как это сделать. Буду признателен за любую помощь или идеи!