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
AnimationClipCurveEditingEngine
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
Methods
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
Returns
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
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
ReadBindings(AnimationClip)
Declaration
public static IReadOnlyList<BindingView> ReadBindings(AnimationClip clip)
Parameters
| Type |
Name |
Description |
| AnimationClip |
clip |
|
Returns
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
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
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
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
Returns