public static bool HandleType(InvokeWrapper wrapper, object[] objects) { if (!wrapper.CanRead()) { return(false); } var drawerInfo = InspectorGUI.GetDrawerMethod(wrapper.GetContainingType()); if (!drawerInfo.IsValid) { return(false); } EditorGUI.showMixedValue = !wrapper.AreValuesEqual(objects); var value = drawerInfo.Drawer.Invoke(null, new object[] { objects[0], wrapper, Skin }); var changed = UnityEngine.GUI.changed && (drawerInfo.IsNullable || value != null); // Reset changed state so that non-edited values // are propagated to other properties. UnityEngine.GUI.changed = false; EditorGUI.showMixedValue = false; if (!changed) { return(false); } foreach (var obj in objects) { object newValue = value; if (drawerInfo.CopyOp != null) { newValue = wrapper.GetValue(obj); // CopyOp returns the new value for value types. var ret = drawerInfo.CopyOp.Invoke(null, new object[] { value, newValue }); if (ret != null) { newValue = ret; } } wrapper.ConditionalSet(obj, newValue); } return(true); }