public static void DrawFields(this object current, string header = "Fields")
 {
     if (header.IsEmpty() || EditorGUILayoutExtensionSpecial.DrawFoldout(header))
     {
         if (!header.IsEmpty())
         {
             EditorGUI.indentLevel += 1;
         }
         foreach (var item in current.GetVariables())
         {
             string label = item.Key.ToTitleCase();
             object field = item.Value;
             if (field is ICollection)
             {
                 var enumerable = field as IEnumerable;
                 enumerable.OfType <object>().ToList().Draw(label);
                 continue;
             }
             if (field.GetType().IsClass&& field.GetType().IsSerializable&& !(field is string))
             {
                 field.DrawFields(label);
                 continue;
             }
             string value = Convert.ToString(field);
             if (value != null)
             {
                 value.Draw(label);
             }
         }
         if (!header.IsEmpty())
         {
             EditorGUI.indentLevel -= 1;
         }
     }
 }
 public static void Draw <T>(this IList <T> current, string header = "List")
 {
     if (header.IsEmpty() || EditorGUILayoutExtensionSpecial.DrawFoldout(header))
     {
         if (!header.IsEmpty())
         {
             EditorGUI.indentLevel += 1;
         }
         for (int index = 0; index < current.Count; ++index)
         {
             var    item  = current[index];
             string label = "#" + index;
             if (item is ICollection)
             {
                 var enumerable = item as IEnumerable;
                 enumerable.OfType <object>().ToList().Draw(label);
                 continue;
             }
             if (!item.IsNull() && item.GetType() != typeof(UnityObject) && item.GetType().IsClass&& item.GetType().IsSerializable&& !(item is string))
             {
                 item.DrawFields(label);
                 continue;
             }
             item.DrawAuto(label);
         }
         if (!header.IsEmpty())
         {
             EditorGUI.indentLevel -= 1;
         }
     }
 }
        public static void Draw(this IDictionary current, UnityLabel label = null, GUIStyle style = null, bool indention = true)
        {
            var open = EditorGUILayoutExtensionSpecial.DrawFoldout(label.ToString().ToTitleCase(), Class.CreateLayout());

            if (!open)
            {
                return;
            }
            EditorGUI.indentLevel += 1;
            foreach (DictionaryEntry item in current)
            {
                item.Value.DrawAuto(item.Key.ToString(), style, true);
            }
            EditorGUI.indentLevel -= 1;
        }