public override void ApplyPropertyMeta(SerializedProperty property, AMetaAttribute metaAttribute) { InfoBoxAttribute infoBoxAttribute = (InfoBoxAttribute)metaAttribute; UnityEngine.Object target = PropertyUtility.GetTargetObject(property); if (!string.IsNullOrEmpty(infoBoxAttribute.VisibleIf)) { FieldInfo conditionField = ReflectionUtility.GetField(target, infoBoxAttribute.VisibleIf); if (conditionField != null && conditionField.FieldType == typeof(bool)) { if ((bool)conditionField.GetValue(target)) { this.DrawInfoBox(infoBoxAttribute.Text, infoBoxAttribute.Type); } return; } MethodInfo conditionMethod = ReflectionUtility.GetMethod(target, infoBoxAttribute.VisibleIf); if (conditionMethod != null && conditionMethod.ReturnType == typeof(bool) && conditionMethod.GetParameters().Length == 0) { if ((bool)conditionMethod.Invoke(target, null)) { this.DrawInfoBox(infoBoxAttribute.Text, infoBoxAttribute.Type); } return; } string warning = infoBoxAttribute.GetType().Name + " 作用在一个有效的布尔值字段条件或着一个方法方法名!!!"; EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, context: PropertyUtility.GetTargetObject(property), logToConsole: false); } else { this.DrawInfoBox(infoBoxAttribute.Text, infoBoxAttribute.Type); } }
public override void ApplyPropertyMeta(SerializedProperty property, AMetaAttribute metaAttribute) { OnValueChangedAttribute onValueChangedAttribute = (OnValueChangedAttribute)metaAttribute; UnityEngine.Object target = PropertyUtility.GetTargetObject(property); MethodInfo callbackMethod = ReflectionUtility.GetMethod(target, onValueChangedAttribute.CallbackName); if (callbackMethod != null && callbackMethod.ReturnType == typeof(void) && callbackMethod.GetParameters().Length == 0) { property.serializedObject.ApplyModifiedProperties(); // 我们必须应用已编辑元数据,这样回调函数就可以被执行 callbackMethod.Invoke(target, null); } else { EditorDrawUtility.DrawHelpBox(onValueChangedAttribute.GetType().Name + " 只作用于无返回值且无参数的函数", MessageType.Warning, context: target); } }
public abstract void ApplyPropertyMeta(SerializedProperty property, AMetaAttribute metaAttribute);