logo SERENITY
Game Systems Foundation
Search Results for

    Show / Hide Table of Contents

    Class AnimationClipCurveEditingEngine

    Curve-level CRUD over an UnityEngine.AnimationClip's bindings: a display-friendly read of every bound property (ReadBindings(AnimationClip)), whole-curve reads and writes, and individual key edits. Every mutation runs inside an AnimationClipEditScope, mirroring the undo/dirty bracketing Write(AnimationClip, ClipSettingsView, string) already established for the settings block — the caller remains responsible for UnityEditor.AssetDatabase.SaveAssets once its own gesture is done.

    Inheritance
    object
    AnimationClipCurveEditingEngine
    Inherited Members
    object.ToString()
    object.Equals(object)
    object.Equals(object, object)
    object.ReferenceEquals(object, object)
    object.GetHashCode()
    object.GetType()
    object.MemberwiseClone()
    Namespace: Serenity.Editor.AnimationHub.Engine
    Assembly: Serenity.AnimationHub.Editor.dll
    Syntax
    public static class AnimationClipCurveEditingEngine

    Fields

    RootGroupPath

    Display substitute for UnityEditor.EditorCurveBinding.path when it is empty, meaning the binding animates the clip's own bound GameObject rather than a child in its hierarchy.

    Declaration
    public const string RootGroupPath = "(Root)"
    Field Value
    Type Description
    string

    Methods

    AddBinding(AddBindingInput)

    Creates a brand-new float curve binding at input's path/component/property, seeded with one key (and, by default, a second one so the curve has a usable span). Reports AlreadyExisted rather than overwriting when the binding is already present — adding a binding is a create operation, not an implicit overwrite.

    Declaration
    public static AnimationClipCurveEditingEngine.AddBindingResult AddBinding(AnimationClipCurveEditingEngine.AddBindingInput input)
    Parameters
    Type Name Description
    AnimationClipCurveEditingEngine.AddBindingInput input
    Returns
    Type Description
    AnimationClipCurveEditingEngine.AddBindingResult

    AddKeyAtTime(AnimationClip, EditorCurveBinding, float)

    Adds a key at time using the curve's own value there, so adding a key never changes the authored pose.

    Declaration
    public static AnimationClipCurveEditingEngine.KeyEditResult AddKeyAtTime(AnimationClip clip, EditorCurveBinding binding, float time)
    Parameters
    Type Name Description
    AnimationClip clip
    EditorCurveBinding binding
    float time
    Returns
    Type Description
    AnimationClipCurveEditingEngine.KeyEditResult

    AddKeyAtTime(AnimationClip, EditorCurveBinding, float, float)

    Adds a key at time carrying value. If a key already sits within Serenity.Editor.AnimationHub.Engine.AnimationClipCurveEditingEngine.SameTimeKeyEpsilon of time, that key is replaced rather than duplicated — UnityEngine.AnimationCurve.AddKey(System.Single,System.Single) returns -1 on a same-time collision, so the existing key is removed first and the new one added in its place.

    Declaration
    public static AnimationClipCurveEditingEngine.KeyEditResult AddKeyAtTime(AnimationClip clip, EditorCurveBinding binding, float time, float value)
    Parameters
    Type Name Description
    AnimationClip clip
    EditorCurveBinding binding
    float time
    float value
    Returns
    Type Description
    AnimationClipCurveEditingEngine.KeyEditResult

    ReadBindings(AnimationClip)

    Every float and object-reference binding on clip, labeled via Describe(string) and sorted by GroupPath, then GroupSortKey(string) of PropertyGroup, then PropertyLabel.

    Declaration
    public static IReadOnlyList<BindingView> ReadBindings(AnimationClip clip)
    Parameters
    Type Name Description
    AnimationClip clip
    Returns
    Type Description
    IReadOnlyList<BindingView>

    ReadCurve(AnimationClip, EditorCurveBinding)

    The raw float curve for binding, or null when clip is missing the binding, or when binding is an object-reference binding — UnityEditor.AnimationUtility.GetEditorCurve(UnityEngine.AnimationClip,UnityEditor.EditorCurveBinding) already returns null for those, so callers reading a mixed set of bindings from ReadBindings(AnimationClip) must guard the result before using it.

    Declaration
    public static AnimationCurve ReadCurve(AnimationClip clip, EditorCurveBinding binding)
    Parameters
    Type Name Description
    AnimationClip clip
    EditorCurveBinding binding
    Returns
    Type Description
    AnimationCurve

    RemoveBinding(AnimationClip, EditorCurveBinding)

    Deletes a binding entirely — the "empty curve" mechanics of SetEditorCurve, which WriteCurve(WriteCurveInput) also exposes via a null Curve, but named for this call site's own intent instead of asking every caller to remember that convention.

    Declaration
    public static bool RemoveBinding(AnimationClip clip, EditorCurveBinding binding)
    Parameters
    Type Name Description
    AnimationClip clip
    EditorCurveBinding binding
    Returns
    Type Description
    bool

    RemoveKeyNearestTime(AnimationClip, EditorCurveBinding, float)

    Removes the key nearest time. Refuses when the curve has only one key left — a zero-key curve is not a valid curve; removing the last key is RemoveBinding(AnimationClip, EditorCurveBinding)'s job, which deletes the whole binding instead of leaving an invalid one behind.

    Declaration
    public static AnimationClipCurveEditingEngine.KeyEditResult RemoveKeyNearestTime(AnimationClip clip, EditorCurveBinding binding, float time)
    Parameters
    Type Name Description
    AnimationClip clip
    EditorCurveBinding binding
    float time
    Returns
    Type Description
    AnimationClipCurveEditingEngine.KeyEditResult

    SetKeyTangentMode(AnimationClip, EditorCurveBinding, int, TangentMode, bool)

    Sets both tangent directions and the broken flag on one key, then writes the curve back.

    Declaration
    public static AnimationClipCurveEditingEngine.Result SetKeyTangentMode(AnimationClip clip, EditorCurveBinding binding, int keyIndex, AnimationUtility.TangentMode mode, bool broken)
    Parameters
    Type Name Description
    AnimationClip clip
    EditorCurveBinding binding
    int keyIndex
    TangentMode mode
    bool broken
    Returns
    Type Description
    AnimationClipCurveEditingEngine.Result

    WriteCurve(WriteCurveInput)

    Writes input's curve onto its clip and binding inside one AnimationClipEditScope, via the UnityEditor.EditorCurveBinding overload of SetEditorCurve — never the obsolete 5-argument string overload. A rotation-family binding gets UnityEngine.AnimationClip.EnsureQuaternionContinuity run afterward so the authored Euler curve does not introduce a visible flip at the 180-degree wrap.

    Declaration
    public static AnimationClipCurveEditingEngine.Result WriteCurve(AnimationClipCurveEditingEngine.WriteCurveInput input)
    Parameters
    Type Name Description
    AnimationClipCurveEditingEngine.WriteCurveInput input
    Returns
    Type Description
    AnimationClipCurveEditingEngine.Result
    In this article
    © 2026 Serenity. All Rights Reserved