EnumList

using System; [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] public class EnumListLabelAttribute : Attribute {    public Type EnumType; public float LabelWidth; public EnumListLabelAttribute(Type enumType, float labelWidth) {        this.EnumType = enumType; this.LabelWidth = labelWidth; } }

using System; using UnityEngine; using System.Collections; using Sirenix.OdinInspector.Editor; using Sirenix.Utilities.Editor; [OdinDrawer] [DrawerPriority(0, 1000, 0)] // Set a high wrapper priority, so the drawer is part of the wrapping queue public class EnumListLabelDrawer : OdinAttributeDrawer {    public override bool CanDrawTypeFilter(Type type) {        return !typeof(IList).IsAssignableFrom(type); // Don't draw for the list itself, only the list elements }    protected override void DrawPropertyLayout(InspectorProperty property, EnumListLabelAttribute attribute, GUIContent label) {        // Get label for enum index int index = property.Index; string indexName = Enum.GetNames(attribute.EnumType)[index]; // Set label width GUIHelper.PushLabelWidth(attribute.LabelWidth); {            // Call next drawer with enum entry this.CallNextDrawer(property, new GUIContent(indexName)); }        GUIHelper.PopLabelWidth; } }

Usage: [EnumListLabel(typeof(Things), 50)] public GameObject[] m_Things = new GameObject[(int)Things.max];