using UnityEngine; using UnityEditor; using System; namespace NaughtyAttributes.Editor { [CustomPropertyDrawer(typeof(EnumFlagsAttribute))] public class EnumFlagsPropertyDrawer : PropertyDrawerBase { protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) { Enum targetEnum = PropertyUtility.GetTargetObjectOfProperty(property) as Enum; return (targetEnum != null) ? GetPropertyHeight(property) : GetPropertyHeight(property) + GetHelpBoxHeight(); } protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) { EditorGUI.BeginProperty(rect, label, property); Enum targetEnum = PropertyUtility.GetTargetObjectOfProperty(property) as Enum; if (targetEnum != null) { Enum enumNew = EditorGUI.EnumFlagsField(rect, label.text, targetEnum); property.intValue = (int)Convert.ChangeType(enumNew, targetEnum.GetType()); } else { string message = attribute.GetType().Name + " can be used only on enums"; DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); } EditorGUI.EndProperty(); } } }