private void DrawChildProperties(Rect rect, SerializedProperty property) { ScriptableObject scriptableObject = property.objectReferenceValue as ScriptableObject; if (scriptableObject == null) { return; } Rect boxRect = new Rect() { x = 0.0f, y = rect.y + EditorGUIUtility.singleLineHeight, width = rect.width * 2.0f, height = rect.height - EditorGUIUtility.singleLineHeight }; GUI.Box(boxRect, GUIContent.none); using (new EditorGUI.IndentLevelScope()) { SerializedObject serializedObject = new SerializedObject(scriptableObject); using (var iterator = serializedObject.GetIterator()) { float yOffset = EditorGUIUtility.singleLineHeight; if (iterator.NextVisible(true)) { do { SerializedProperty childProperty = serializedObject.FindProperty(iterator.name); if (childProperty.name.Equals("m_Script", System.StringComparison.Ordinal)) { continue; } bool visible = PropertyUtility.IsVisible(childProperty); if (!visible) { continue; } float childHeight = GetPropertyHeight(childProperty); Rect childRect = new Rect() { x = rect.x, y = rect.y + yOffset, width = rect.width, height = childHeight }; NaughtyEditorGUI.PropertyField(childRect, childProperty, true); yOffset += childHeight; }while (iterator.NextVisible(false)); } } serializedObject.ApplyModifiedProperties(); } }