public object OnSceneGUI(object element) { try { if (_cycleScene == null) { _cycleScene = new fiCycleDetector(_cycleEdit, _cycleHeight); } _cycleScene.Enter(); // cycle; don't do anything if (_cycleScene.TryMark(element) == false) { return(element); } // Not showing a scene GUI for the object for this frame should be fine if (element == null) { return(element); } var inspectedProperties = _metadata.GetProperties(InspectedMemberFilters.InspectableMembers); for (int i = 0; i < inspectedProperties.Count; ++i) { var property = inspectedProperties[i]; var editorChain = PropertyEditor.Get(property.StorageType, property.MemberInfo); IPropertyEditor editor = editorChain.FirstEditor; object currentValue = property.Read(element); object updatedValue = editor.OnSceneGUI(currentValue); // We use EqualityComparer instead of == because EqualityComparer will properly unbox structs if (EqualityComparer <object> .Default.Equals(currentValue, updatedValue) == false) { property.Write(element, updatedValue); } } return(element); } finally { _cycleScene.Exit(); if (_cycleScene.Depth == 0) { _cycleScene = null; } } }
//protected List<FieldInfo> Fields { get; set; } protected virtual void OnEnable() { InspectedObject = serializedObject.targetObject; InspectedType = InspectedObject.GetType(); Properties = InspectedType .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(property => property.DeclaringType == InspectedType) .Where(property => (property.SetMethod?.IsPublic).GetValueOrDefault()) .ToList(); //Fields = InspectedType // .GetFields(BindingFlags.Public | BindingFlags.Instance) // .Concat(InspectedType // .GetFields(BindingFlags.NonPublic | BindingFlags.Instance) // .Where(field => field.GetCustomAttribute<SerializeField>() != null) // ) // .Where(field => field.IsInitOnly == false) // .ToList(); }