public static void DrawField(MemberField field, Color defaultColor)
        {
            EditorGUI.indentLevel = field.IndentLevel;

            if (field.Comment.Length > 0)
            {
                if (field.IsDefaultCommentColor)
                {
                    GUI.color = defaultColor;
                }
                else
                {
                    GUI.color = field.CommentColor;
                }
                EditorGUILayout.HelpBox(field.Comment, field.CommentMessageType);
            }

            if (field.IsDefaultColor)
            {
                GUI.color = defaultColor;
            }
            else
            {
                GUI.color = field.Color;
            }

            if (field is ArrayObjectReferenceField)
            {
                DrawArrayObjectReferenceField((ArrayObjectReferenceField)field, defaultColor);
            }
            else if (field is ArrayFieldField)
            {
                DrawArrayField((ArrayFieldField)field);
            }
            else if (field is ButtonGroupField)
            {
                DrawButtonGroup((ButtonGroupField)field);
            }
            else if (field is MethodField)
            {
                DrawMethodField((MethodField)field);
            }
            else if (field is ObjectReferenceField)
            {
                DrawObjectReferenceField((ObjectReferenceField)field, defaultColor);
            }
            else
            {
                DrawGenericField(field);
            }
        }
        public static void DrawGenericField(MemberField field)
        {
            EditorGUILayout.BeginHorizontal();

            if (field.IsReadOnly())
            {
                System.Object v = field.GetValue();
                if (v != null)
                {
                    EditorGUILayout.LabelField(field.GetName(), field.GetValue().ToString());
                }
                else
                {
                    EditorGUILayout.LabelField(field.GetName(), "(null)");
                }

                EditorGUILayout.EndHorizontal();
                return;
            }
            field.SetValue(DrawFieldElement(field.Type, field.GetName(), field.GetValue(), field.GetFieldType(), field.ValueRange, field.Style));

            EditorGUILayout.EndHorizontal();
        }