對Vector3.Lerp 插值的理解


有時,我們在做游戲時會發現有些跟隨動作不夠圓滑或者需要一個緩沖的效果,這時,一般會考慮到插值。所以對插值的理解是必需的。(比如攝像機跟隨主角)

插值是數學上的一個概念,在這里用公式表示就是:from + (to - from) * t;這也就是Lerp的返回值(用這個公式分別算出x,y,z)。

static function Lerp (from : Vector3, to : Vector3, t : float) : Vector3 

from 是起始的位置,to是目標位置,按照數字t在from到to之間插值。這句話比較難理解,下面舉個例子。

這和我們用公式算出來的如出一轍。現在我們再看一個具體的例子

//在1秒時間動畫位置移動從from開始到to結束。(這是官方的例子)

using UnityEngine; using System.Collections; public class example : MonoBehaviour { public Transform start; public Transform end; void Update() { transform.position = Vector3.Lerp(start.position, end.position, Time.time); } }

位置移動從start開始到end結束,這好理解,但是為什么是1秒呢?

Time.time是從0開始隨時間增加的。

例1的t是一個固定的值,返回一個固定的向量。此時t是變量,在不斷增加。那么:

當Time.time = 0時--->transform.position = start.position,位置沒有變化;

當Time.time從0趨向於1時--->transform.position 不斷接近start.position,該腳本是掛在start物體上的,所以start會不斷靠近end。

那么問題來了,當Time.time>1的時候,會怎么樣呢?額(⊙o⊙)…我們說不會。

由上面的公式from + (to - from) * t可知,當t=1時,to - from = 0,此時t就無效了。

例1是從靜態角度看,例2是從動態角度看的(兩個變量,一個是時間在變化,一個是位置在變化)。

想一想例2,如果不是Time.time,而是0.5,會怎么樣?(只看一個變量)

由圖易知:A物體會不斷以0.5的比例無限接近於B

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM