AnimationCurve not refreshed in inspector

Hi everybody!

I have a MonoBehavior with a public curve attribute:

public class Sample : MonoBehavior
   public AnimationCurve curve;

With the associated editor class:

public class SampleEditor : Editor
   public override void OnInspectorGUI()


      if (GUILayout.Button("Do something"))
         // Change anything in the curve, like, add, remove, move a keyframe

This works perfectly but the problem is that the preview of the AnimationCurve is not refreshed.
If I change the inspector size by dragging the mouse, the curve representation is refreshed (although I’ve noticed that if I go back to exactly the same inspector size, the old curve preview came back).
So I suspected a cache problem, but I now have tried everything I knew without any success, like:

  • serializedObject.SetIsDifferentCacheDirty();
  • serializedObject.Update();
  • serializedObject.ApplyModifiedProperties();
  • EditorUtility.SetDirty(target);
  • Repaint();
  • Re create my own Property, etc…

And I can’t see anything public in SerializedProperty or AnimationCurve to refresh the preview or tell to do it.
However, the curve editing window do it very well…

Any ideas are welcome! ^^’

You could probably try Editor.repaint, or something like that.
Unity - Scripting API: Editor.Repaint

You did not tell Unity to save the changes. You should use Undo.RecordObject

Sample obj = (Sample)target;

if (GUILayout.Button("Do something"))
    Undo.RecordObject(obj, "Removed Key");

A very old one but it seems to be a common question. I figured out an answer today. It involved reading the value from the class directly and then putting the updated value into your property:


yourClass.yourCurve = EditorGUILayout.CurveField(yourClass.yourCurve);

      yourCurvesProperty.animationCurveValue = yourClass.yourCurve;