public static GetKeyTangentMode ( |
||
keyframe | ||
leftRight | int | |
Результат | TangentMode |
public static void ClampCurveRotate360(AnimationCurve rotatecurve, int f, bool rotateCircle) { float prev = rotatecurve.keys[f - 1].value; float curr = rotatecurve.keys[f].value; if (rotateCircle) { //rotate beyond 1 circle if (curr < -180f || curr > 180f) { return; } if (prev < -180f || prev > 180f) { if (f > 1) { prev = rotatecurve.keys[f - 2].value; } } } while ((curr - prev) > 180) { curr -= 360; } while ((curr - prev) < -180) { curr += 360; } if (rotatecurve.keys[f].value != curr) { TangentMode modeIn = KeyframeUtil.GetKeyTangentMode(rotatecurve.keys[f].tangentMode, (int)rotatecurve.keys[f].inTangent); TangentMode modeOut = KeyframeUtil.GetKeyTangentMode(rotatecurve.keys[f].tangentMode, (int)rotatecurve.keys[f].outTangent); if (f == rotatecurve.length - 1) { modeIn = TangentMode.Linear; } rotatecurve.MoveKey(f, KeyframeUtil.GetNew(rotatecurve.keys[f].time, curr, modeIn, modeOut)); } }
// UnityEditor.CurveUtility.cs (c) Unity Technologies public static void UpdateTangentsFromMode(AnimationCurve curve, int index) { if (index < 0 || index >= curve.length) { return; } Keyframe key = curve[index]; if (KeyframeUtil.GetKeyTangentMode(key, 0) == TangentMode.Linear && index >= 1) { key.inTangent = CalculateLinearTangent(curve, index, index - 1); curve.MoveKey(index, key); } if (KeyframeUtil.GetKeyTangentMode(key, 1) == TangentMode.Linear && index + 1 < curve.length) { key.outTangent = CalculateLinearTangent(curve, index, index + 1); curve.MoveKey(index, key); } if (KeyframeUtil.GetKeyTangentMode(key, 0) != TangentMode.Smooth && KeyframeUtil.GetKeyTangentMode(key, 1) != TangentMode.Smooth) { return; } curve.SmoothTangents(index, 0.0f); }