void PrintCompos() { toDebug.Sort(CompareComponentByTypeThenGameObject); System.Type t = null; foreach (var c in toDebug) { if (t != c.GetType()) { t = c.GetType(); if (!registeredTypes.ContainsKey(t)) { registeredTypes.Add(t, T_INIT_OPEN); } registeredTypes[t] = EditorGUILayout.Foldout(registeredTypes[t], t.Name); } if (registeredTypes[t]) { Debugable d = c as Debugable; EditorGUI.indentLevel++; if (!registeredD.ContainsKey(d)) { registeredD.Add(d, D_INIT_OPEN); } registeredD[d] = EditorGUILayout.Foldout(registeredD[d], c.gameObject.name); if (registeredD[d]) { EditorGUI.indentLevel++; d.ForDebugWindow(); EditorGUI.indentLevel--; } EditorGUI.indentLevel--; } } }
void PrintGO() { toDebug.Sort(CompareComponentByGameObjectThenType); GameObject go = null; foreach (var c in toDebug) { if (go != c.gameObject) { go = c.gameObject; if (!registeredGO.ContainsKey(go)) { registeredGO.Add(go, GO_INIT_OPEN); } registeredGO[go] = EditorGUILayout.Foldout(registeredGO[go], go.name); } if (registeredGO[go]) { Debugable d = c as Debugable; EditorGUI.indentLevel++; if (!registeredD.ContainsKey(d)) { registeredD.Add(d, D_INIT_OPEN); } registeredD[d] = EditorGUILayout.Foldout(registeredD[d], c.GetType().Name); if (registeredD[d]) { EditorGUI.indentLevel++; d.ForDebugWindow(); EditorGUI.indentLevel--; } EditorGUI.indentLevel--; } } }
/// <summary> /// Outputs the debug info for a child member of the class. /// </summary> /// <param name="C"></param> /// <returns>The formatted string of child class member values.</returns> /// <remarks>Used for inline debug output, returning the string "null" if the child is null.</remarks> /// <example> /// An example implementation of DebugInfo() for a class with debuggable members: /// <code> /// public override string DebugInfo() /// { /// return string.Format("M1: {0}, M2: {1}, M3: {2}", member1, member2, DebugInfo(member3)); /// } /// </code> /// </example> public static string DebugInfo(Debugable C) { return(C == null ? "null" : C.DebugInfo()); }