public override void OnInspectorGUI() { GUI.enabled = !Application.isPlaying; serializedObject.Update(); SerializedProperty recordDestructionProperty = serializedObject.FindProperty("recordDestruction"); SerializedProperty recordInstantiationProperty = serializedObject.FindProperty("recordInstantiation"); EditorGUILayout.LabelField("Record Options", EditorStyles.miniBoldLabel); EditorGUILayout.BeginHorizontal(); SetBool(recordDestructionProperty.prefabOverride); recordDestructionProperty.boolValue = EditorGUILayout.Toggle("Destruction", recordDestructionProperty.boolValue); SetBool(recordInstantiationProperty.prefabOverride); recordInstantiationProperty.boolValue = EditorGUILayout.Toggle("Instantiation", recordInstantiationProperty.boolValue); EditorGUILayout.EndHorizontal(); SetBool(false); EditorGUILayout.LabelField("Recorded Components", EditorStyles.miniBoldLabel); SerializedProperty recordedComponentsProperty = serializedObject.FindProperty("recordedComponents"); EditorGUILayout.BeginHorizontal(); SetBool(recordedComponentsProperty.prefabOverride); int i = 0; int numPerRow = 2; foreach (Component component in editTarget.GetComponents <Component>()) { if (component == editTarget) { continue; } bool componentRecorded = recordedComponentsProperty.ArrayContains(component); bool result = EditorGUILayout.Toggle(component.GetType().Name, componentRecorded); if (componentRecorded && !result) { recordedComponentsProperty.ArrayDeleteElement(component); } else if (!componentRecorded && result) { recordedComponentsProperty.ArrayAddElement(component); } i++; if (i == numPerRow) { EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); i = 0; } } EditorGUILayout.EndHorizontal(); SetBool(false); serializedObject.ApplyModifiedProperties(); }