正確使用Lerp

Lerp功能

  • 在unity中可以用于物體到達(dá)另外一個(gè)目標(biāo)物體之間進(jìn)行平滑過(guò)渡運(yùn)動(dòng)效果。
  • 函數(shù)原型為L(zhǎng)erp(a,b,t);內(nèi)部實(shí)現(xiàn)為y = b+(1-t)*a;其中t被clamp在了[0,1],也就是說(shuō)最小為0,最大為1.
  • 一般的用法為
transform.position = Vector3.Lerp(transform.position,target.position,Time.detlaTime);

這種方式可以讓物體在從開(kāi)始位置平滑移動(dòng)到目標(biāo)位置,但是運(yùn)動(dòng)的方式是先快后慢,不是勻速過(guò)去的。

  • 如果采用Lerp方法但又要求勻速計(jì)算的話,一種方法是確定起始點(diǎn)與結(jié)束點(diǎn)為固定值,t為勻速增加的值,可以按照時(shí)間增加的比例如http://www.itdecent.cn/p/bb780b91e192;也可以按照距離比例等。另外方法是根據(jù)Lerp的實(shí)現(xiàn)公式來(lái)考慮,因?yàn)閥=Lerp(from,to,t) = from+(to-from)*t,因?yàn)槊看蝔rom在變,所以造成Lerp沒(méi)有勻速,如果將t包含1/(to-from),也可以實(shí)現(xiàn)勻速。
  • 針對(duì)自己想到的方法相關(guān)代碼如下:其中timeNeed是外部設(shè)置的在t時(shí)間內(nèi)滑動(dòng)到target目標(biāo)。雖然算法最后一幀會(huì)直接到target上,但是整體是按照勻速通過(guò)
void Update () {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            isLerp = true;
            costTime = 0.0f;
        }

        if (isLerp == true)
        {
            float distance2 = Vector3.Distance (transform.position, target.position);
            float lerpT = distance*Time.deltaTime/ (timeNeed*distance2);

            transform.position = Vector3.Lerp (transform.position, target.position, lerpT);
            costTime += Time.deltaTime;
            if(transform.position == target.position)
            {
                isLerp = false;
                Debug.Log (costTime);
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)自bluerajaUnity官方示例中關(guān)于Lerp()函數(shù)的使用并非勻速插值,原因是Lerp()的from參...
    食不知味_夜不能寐閱讀 9,706評(píng)論 2 4
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評(píng)論 0 33
  • 【接受當(dāng)下時(shí)刻】 臣服是無(wú)條件、無(wú)保留的接受當(dāng)下。 當(dāng)你臣服時(shí),你需要接受的不是所有情況,而是被稱作當(dāng)下的一小部分...
    霸道學(xué)習(xí)閱讀 604評(píng)論 0 0
  • 可能初次看見(jiàn)這個(gè)題目會(huì)奇怪這句話的意思,四海之內(nèi)皆我媽難道是說(shuō)我的母親這么厲害,以至于會(huì)出現(xiàn)在何處? 其實(shí)并不是,...
    喬果兒閱讀 427評(píng)論 0 1

友情鏈接更多精彩內(nèi)容