public static void DrawFields(object instance, float fieldWidth) { var padding = 2f; var margin = 1f; var cellHeight = 24f; var tableStyle = new GUIStyle("Box"); GUILayout.BeginHorizontal(); { GUILayoutExt.Box(padding, margin, () => { GUILayoutExt.TableCaption("Field", EditorStyles.miniBoldLabel); }, tableStyle, GUILayout.Width(fieldWidth), GUILayout.Height(cellHeight)); GUILayoutExt.Box(padding, margin, () => { GUILayoutExt.TableCaption("Value", EditorStyles.miniBoldLabel); }, tableStyle, GUILayout.ExpandWidth(true), GUILayout.Height(cellHeight)); } GUILayout.EndHorizontal(); var fields = instance.GetType().GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public); foreach (var field in fields) { GUILayout.BeginHorizontal(); { GUILayoutExt.Box(padding, margin, () => { GUILayoutExt.DataLabel(field.Name); }, tableStyle, GUILayout.Width(fieldWidth), GUILayout.Height(cellHeight)); GUILayoutExt.Box(padding, margin, () => { var value = field.GetValue(instance); if (GUILayoutExt.PropertyField(field, ref value) == true) { field.SetValue(instance, value); } }, tableStyle, GUILayout.ExpandWidth(true), GUILayout.Height(cellHeight)); } GUILayout.EndHorizontal(); } }