public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { drawPrefixLabel = false; Type attributeType = ((PropertyFieldAttribute)attribute).attributeType; object[] arguments = ((PropertyFieldAttribute)attribute).arguments; PropertyDrawer drawerOverride = null; if (fieldInfo.FieldType.IsArray) { Debug.LogError(string.Format("{0} should not be applied to arrays or lists.", attribute.GetType().Name)); return; } if (attributeType != null) { drawerOverride = GetPropertyDrawer(attributeType, arguments); } Begin(position, property, label); EditorGUI.BeginChangeCheck(); if (drawerOverride == null) EditorGUI.PropertyField(_currentPosition, property, label, true); else drawerOverride.OnGUI(_currentPosition, property, label); if (EditorGUI.EndChangeCheck()) { string propertyPath = property.GetAdjustedPath(); string[] propertyPathSplit = propertyPath.Split('.'); propertyPathSplit[propertyPathSplit.Length - 1] = propertyPathSplit.Last().Replace("_", "").Capitalized(); propertyPath = propertyPathSplit.Concat("."); property.serializedObject.ApplyModifiedProperties(); Array.ForEach(_targets, t => t.SetValueToMemberAtPath(propertyPath, t.GetValueFromMemberAtPath(propertyPath))); property.serializedObject.Update(); } End(); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { drawPrefixLabel = false; if (fieldInfo.FieldType.IsArray) { Debug.LogError(string.Format("{0} must not be applied to arrays or lists.", attribute.GetType().Name)); return; } Begin(position, property, label); EditorGUI.BeginChangeCheck(); if (drawerOverride == null) EditorGUI.PropertyField(currentPosition, property, label, true); else drawerOverride.OnGUI(currentPosition, property, label); var value = property.GetValue(); if (hasChanged) { var propertyPath = property.GetAdjustedPath(); var propertyPathSplit = propertyPath.Split('.'); propertyPathSplit[propertyPathSplit.Length - 1] = propertyPathSplit.Last().Replace("_", "").Capitalized(); propertyPath = propertyPathSplit.Concat("."); property.serializedObject.ApplyModifiedProperties(); Array.ForEach(targets, t => t.SetValueToMemberAtPath(propertyPath, value)); property.serializedObject.Update(); hasChanged = false; } hasChanged = EditorGUI.EndChangeCheck(); End(); }