private void OnResetClick() { RuntimeUndo.BeginRecord(); GameObject go = new GameObject(); go.SetActive(false); Component component = go.GetComponent(Component.GetType()); if (component == null) { component = go.AddComponent(Component.GetType()); } bool isMonoBehavior = component is MonoBehaviour; PropertyDescriptor[] descriptors = GetDescriptors(m_converter); for (int i = 0; i < descriptors.Length; ++i) { PropertyDescriptor descriptor = descriptors[i]; MemberInfo memberInfo = descriptor.ComponentMemberInfo; if (memberInfo is PropertyInfo) { PropertyInfo p = (PropertyInfo)memberInfo; object defaultValue = p.GetValue(component, null); RuntimeUndo.RecordValue(Component, memberInfo); p.SetValue(Component, defaultValue, null); } else { if (isMonoBehavior) { if (memberInfo is FieldInfo) { FieldInfo f = (FieldInfo)memberInfo; object defaultValue = f.GetValue(component); RuntimeUndo.RecordValue(Component, memberInfo); f.SetValue(Component, defaultValue); } } } } for (int i = 0; i < descriptors.Length; ++i) { PropertyDescriptor descriptor = descriptors[i]; MemberInfo memberInfo = descriptor.MemberInfo; PropertyEditor propertyEditor = GetPropertyEditor(memberInfo); if (propertyEditor != null) { propertyEditor.Reload(); } } Destroy(go); RuntimeUndo.EndRecord(); RuntimeUndo.BeginRecord(); for (int i = 0; i < descriptors.Length; ++i) { PropertyDescriptor descriptor = descriptors[i]; MemberInfo memberInfo = descriptor.ComponentMemberInfo; if (memberInfo is PropertyInfo) { RuntimeUndo.RecordValue(Component, memberInfo); } else { if (isMonoBehavior) { RuntimeUndo.RecordValue(Component, memberInfo); } } } RuntimeUndo.EndRecord(); }
protected virtual void InitEditor(PropertyEditor editor, PropertyDescriptor descriptor) { editor.Init(descriptor.Target, descriptor.MemberInfo, descriptor.Label, null, descriptor.ValueChangedCallback, null, true, descriptor.ChildDesciptors); }