public static bool DrawRecursive(ref object target, BaseGUI gui, int id, UnityObject unityTarget, params string[] memberNames) { List <MemberInfo> members; var targetType = target.GetType(); if (memberNames.IsNullOrEmpty()) { members = VisibilityLogic.CachedGetVisibleMembers(targetType); } else { members = new List <MemberInfo>(); for (int i = 0; i < memberNames.Length; i++) { var name = memberNames[i]; var member = ReflectionHelper.CachedGetMember(targetType, name); if (member == null) { LogFormat("RecursiveDrawer: Couldn't find member {0} in {1}", name, targetType.Name); continue; } if (VisibilityLogic.IsVisibleMember(member)) { members.Add(member); } } } if (members.Count == 0) { gui.HelpBox("Object doesn't have any visible members"); return(false); } bool changed = false; using (gui.Indent()) { for (int i = 0; i < members.Count; i++) { MemberInfo member = members[i]; if (!ConditionalVisibility.IsVisible(member, target)) { continue; } EditorMember em; changed |= gui.Member(member, target, unityTarget, id, false, out em); if (em != null) { target = em.RawTarget; } } } return(changed); }