微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有UIElements的自定义检查器枚举标志

如何解决具有UIElements的自定义检查器枚举标志

我想通过VisualElement使用新的UIElement为Enum标志字段创建自定义属性抽屉。

通过查看Unity的源代码,我发现他们使用以下代码实现了这一目标。

Type enumType;
ScriptAttributeUtility.GetFieldInfoFromProperty(property,out enumType); //internal
if (enumType.IsDefined(typeof(FlagsAttribute),false))
{
    var field = new EnumFlagsField();
    field.choices = property.enumdisplayNames.ToList(); //field.choices - internal
    field.value = (Enum)Enum.ToObject(enumType,property.intValue);
    return ConfigureField<EnumFlagsField,Enum>(field,property); //Adds styling and events
}

问题是这段代码的一部分是内部的,而我可以像这样替换第一次调用获取fieldInfo

var enumType = property.serializedobject.targetobject.GetType().GetFields(BindingFlags.Instance)
                .First(info => info.Name == property.name).FieldType;

问题:如何设置field.choices 不加思考。有没有其他方法可以使用UIElements创建多选弹出式元素?

当前有效的解决方案(使用反射)

var enumType = property.serializedobject.targetobject.GetType().GetFields(BindingFlags.Instance)
    .First(info => info.Name == property.name).FieldType;
if (enumType.IsDefined(typeof(FlagsAttribute),false))
{
    var field = new EnumFlagsField();
    field.GetType().GetField("choices").SetValue(field,property.enumdisplayNames.ToList());
    field.value = (Enum)Enum.ToObject(enumType,property); //Adds styling and events
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。