如何在单位3D中线性插值动画曲线?

时间:2016-09-23 14:05:14

标签: unity3d

经过几个小时的研究,我无法线性插入两个动画曲线,我需要像Mathf.lerp这样的动画曲线,我尝试使用inTangent和OutTangent以及动画曲线的关键帧,但它不存储价值观,我错过了什么? 需要指导,这对我的项目有很大的帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

对我来说,你正在寻找" 变形"一个动画曲线到另一个。这个imho取决于你的用例。

假设两条曲线都在[0.0,1.0]之间定义,我会计算两者中t的曲线值,并在同一时间线性插值两个结果。

/*
* Evaluates two AnimationCurve objects, and interpolates linearly
* between the results, effectively "morphing" from curve A to curve
* B in a linear fashion.
* Both curves must be defined between 0.0 and 1.0, and t must be
* within the same 0.0-1.0 range too.
*/
public float EvaluateLerpTwoCurves(AnimationCurve a, AnimationCurve b, float t) {
    float valueA = a.Evaluate (t);
    float valueB = b.Evaluate (t);
    float result = Mathf.Lerp(valueA, valueB, t);
    return result;
}

您可能希望使用不同的方法在AnimationCurve之间进行插值(不像Mathf.Lerp那样线性地进行插值),您甚至可以使用第三个AnimationCurve来定义如何变形在两条曲线之间。

请注意,上面建议的代码要求两条曲线都定义在0.0和1.0之间,t也必须在0.0-1.0范围内。