private void OnDisable() { PropertyMetaDatabase.ClearCache(); PropertyDrawerDatabase.ClearCache(); PropertyGrouperDatabase.ClearCache(); PropertyValidatorDatabase.ClearCache(); PropertyDrawConditionDatabase.ClearCache(); FieldDrawerDatabase.ClearCache(); MethodDrawerDatabase.ClearCache(); }
public override void OnInspectorGUI() { if (this.useDefaultInspector) { this.DrawDefaultInspector(); } else { this.serializedObject.Update(); if (this.script != null) { GUI.enabled = false; EditorGUILayout.PropertyField(this.script); GUI.enabled = true; } // Draw fields HashSet <string> drawnGroups = new HashSet <string>(); foreach (var field in this.fields) { if (this.groupedFields.Contains(field)) { // Draw grouped fields string groupName = (field.GetCustomAttributes(typeof(GroupAttribute), true)[0] as GroupAttribute).Name; if (!drawnGroups.Contains(groupName)) { drawnGroups.Add(groupName); PropertyGrouper grouper = this.GetPropertyGrouperForField(field); if (grouper != null) { grouper.BeginGroup(groupName); this.ValidateAndDrawFields(this.groupedFieldsByGroupName[groupName]); grouper.EndGroup(); } else { this.ValidateAndDrawFields(this.groupedFieldsByGroupName[groupName]); } } } else { // Draw non-grouped field this.ValidateAndDrawField(field); } } this.serializedObject.ApplyModifiedProperties(); } // Draw non-serialized fields foreach (var field in this.nonSerializedFields) { DrawerAttribute drawerAttribute = (DrawerAttribute)field.GetCustomAttributes(typeof(DrawerAttribute), true)[0]; FieldDrawer drawer = FieldDrawerDatabase.GetDrawerForAttribute(drawerAttribute.GetType()); if (drawer != null) { drawer.DrawField(this.target, field); } } // Draw native properties foreach (var property in this.nativeProperties) { DrawerAttribute drawerAttribute = (DrawerAttribute)property.GetCustomAttributes(typeof(DrawerAttribute), true)[0]; NativePropertyDrawer drawer = NativePropertyDrawerDatabase.GetDrawerForAttribute(drawerAttribute.GetType()); if (drawer != null) { drawer.DrawNativeProperty(this.target, property); } } // Draw methods foreach (var method in this.methods) { DrawerAttribute drawerAttribute = (DrawerAttribute)method.GetCustomAttributes(typeof(DrawerAttribute), true)[0]; MethodDrawer methodDrawer = MethodDrawerDatabase.GetDrawerForAttribute(drawerAttribute.GetType()); if (methodDrawer != null) { methodDrawer.DrawMethod(this.target, method); } } }