private void CreateChildren() { if (actualValue == null) { return; } DestroyChildren(); circularReference = CheckCircularReference(this); UnityEngine.Debug.Assert(circularReference == null, "circularReference == null"); FieldInfo[] fieldInfos = EditorReflector.GetFields(actualType); for (int i = 0; i < fieldInfos.Length; i++) { FieldInfo fi = fieldInfos[i]; if (ShouldReflectProperty(fi)) { children.Add(CreateChild(this, fi.Name, fi.FieldType, fi.GetValue(actualValue))); } } }
private void UpdateChildren() { FieldInfo[] fieldInfos = EditorReflector.GetFields(actualType); childSet = childSet ?? new List <ReflectedProperty>(8); for (int i = 0; i < children.Count; i++) { childSet.Add(children[i]); } for (int i = 0; i < fieldInfos.Length; i++) { FieldInfo info = fieldInfos[i]; if (ShouldReflectProperty(info)) { ReflectedProperty child = children.Find(info, (c, fInfo) => c.name == fInfo.Name); if (child != null) { UpdateChildIntenal(child, info.GetValue(actualValue)); childSet.Remove(child); } else { children.Add(CreateChild(this, info.Name, info.FieldType, info.GetValue(actualValue))); } } } for (int i = 0; i < childSet.Count; i++) { children.Remove(childSet[i]); } childSet.Clear(); UnityEngine.Debug.Assert(isDirty == false && changedChildren.Count == 0); }