2016-09-23 58 views
0

經過長達數小時的研究,我只是無法線性插入兩條動畫曲線,我需要類似Mathf.lerp的動畫曲線,我嘗試使用inTangent和OutTangent與動畫曲線的關鍵幀進行比較,但它不存儲價值觀,我錯過了什麼? 需要指導,這對我的項目會有很大的幫助,謝謝。如何在統一3D中線性內插動畫曲線?

+0

您能否澄清一下您的使用案例,這兩條動畫曲線是什麼,您想要達成什麼目標?我使用'AnimationCurve'來定義使用['AnimationCurve.Evaluate'](https://docs.unity3d.com/ScriptReference/AnimationCurve.Evaluate.html)爲各種目的插入的曲線,但是您的問題需要澄清。 – jjmontes

+0

當然,我可以用最簡單的方式向你解釋,就像我們如何使用Mathf.lerp(float a,float b,float time)一樣,我需要像AnimationCurve.Lerp(animationCurve a,animation curve b,float time ) –

回答

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範圍內。

+0

謝謝你試過了,它有效! @jjmontes –