using UnityEngine; using UnityEditor; public class AnimationCurveGUI { private static Rect SubtractPopupWidth(Rect position) { position.width -= 18f; return position; } private static Rect GetPopupRect(Rect position) { position.xMin = position.xMax - 13f; return position; } #region EditorGUILayout public static AnimationCurve CurveField(AnimationCurve value, params GUILayoutOption[] options) { Rect position = EditorGUILayout.GetControlRect(false, 16f, EditorStyles.colorField, options); return CurveField(position, value); } public static AnimationCurve CurveField(string label, AnimationCurve value, params GUILayoutOption[] options) { Rect position = EditorGUILayout.GetControlRect(true, 16f, EditorStyles.colorField, options); return CurveField(position, label, value); } public static AnimationCurve CurveField(GUIContent label, AnimationCurve value, params GUILayoutOption[] options) { Rect position = EditorGUILayout.GetControlRect(true, 16f, EditorStyles.colorField, options); return CurveField(position, label, value); } #endregion #region EditorGUI public static AnimationCurve CurveField(Rect position, AnimationCurve value) { AnimationCurve animationCurve = EditorGUI.CurveField(SubtractPopupWidth(position), value); AnimationCurvePopupMenu.Show(GetPopupRect(position), animationCurve, null); return animationCurve; } public static AnimationCurve CurveField(Rect position, string label, AnimationCurve value) { return CurveField(position, new GUIContent(label), value); } public static AnimationCurve CurveField(Rect position, GUIContent label, AnimationCurve value) { AnimationCurve animationCurve = EditorGUI.CurveField(SubtractPopupWidth(position), label, value); AnimationCurvePopupMenu.Show(GetPopupRect(position), animationCurve, null); return animationCurve; } #endregion /// /// 默认属性字段的绘制,也会为PropertyField自动绘制 /// /// /// /// public static void OnGUI(Rect position, SerializedProperty property, GUIContent label) { label = EditorGUI.BeginProperty(position, label, property); EditorGUI.CurveField(EditorGUI.PrefixLabel(SubtractPopupWidth(position), label), property, Color.green, default(Rect)); AnimationCurvePopupMenu.Show(GetPopupRect(position), null, property); EditorGUI.EndProperty(); } }