Lerp 函数本质理解

Lerp 函数本质理解今天写了两个知识点 发现 CSDN 上都是抄过来抄过去 虽然看看别人写的能解决自己一大部分困惑 然而深入以后还是有不能理解透彻的地方 所以自己把自己理解的加在后面 如有不对 望指教 Unity 中好几个 Lerp 函数 而对于 Lerp 函数的本质 我以前只知道个大概 参考了别人写的 觉得还是不够清晰 截图加上自己的详细理解如下 参考资料 http www manew com blog

今天写了两个知识点,发现 CSDN 上都是抄过来抄过去,虽然看看别人写的能解决自己一大部分困惑,然而深入以后还是有不能理解透彻的地方。所以自己把自己理解的加在后面,如有不对,望指教。

Unity 中好几个 Lerp 函数,而对于 Lerp 函数的本质,我以前只知道个大概,参考了别人写的,觉得还是不够清晰,截图加上自己的详细理解如下:

参考资料:http://www.manew.com/blog-42778-2524.html

Lerp 函数本质理解

Lerp 函数本质理解

Lerp 函数本质理解

上面是阅读量最高的解释。不过我还是有不理解的地方。下面是我自己的理解:

Vector3.Lerp

  t∈[0,1]。t = 0 时,v = from; t = 1 时,v = to;   

  注意:t 的范围限制在[0,1],这个很重要。

应用:

  上面给出了三个应用案例

  1.transform.position = Vector3.Lerp(start,to,0.5f)   

t 为固定值 0.5,即每一帧移动到 当前 的 (to- start)*0.5 的位置。明白不了就是上面画的第二个线段图那种移动方式。永远是一半的位置,无限接近 to,但是到达不了 to位置

   2.transform.position = Vector3.Lerp(start,to,Time.time)   

t  为 Time.time,这个值是游戏开始到现在经过了多少秒,这个数值是一直增加的。但限于 t 的范围只能是 [0,1],所以 Time.time 只有增加到 1 的时候,即游戏开始到现在 1 秒之前这段时间才有意义。

还是理解不了,为什么说这样的写法是 1 秒时间从 from 位置到 to 位置?(官方案例解释)。

正面想不通,从反面想,Time.time 是随着时间增加的,如果他在这个函数中增加到大于 1,而此时 tranform.position 还没有到达 to 位置,而根据数学公式计算  transform.position = from + ( to – from) * t,此时 t = Time.time 大于 1 ,那意味着这一帧 transform.position 要移动的距离要超过当前 to – from 的距离,就是超过了 to ,这显然是错误的。所以 t  = Time.time =1 的时候,transform.position 在最后一次移动的时候位置变化就是 transform.position = from + (to – from) *1,即到达了 to 位置,这个函数的意义就完成了,而 Time.time 再增加,就毫无意义。所以,就是上面官方案例的解释:这样的写法是 1 秒时间从 from 位置到 to 位置。

3. transform.position = Vector3.Lerp(start,to,smoothing*Time.deltaTime) ; float smoothing =5f;

弹簧一样跟随物体。此时,t = smoothing* Time.deltaTime, smoothing 是一个固定值,Time.deltaTime 是执行上一帧所用的时间,会根据电脑性能不同, FPS 变换,每秒执行的整数不固定,每帧执行的时间不同,即 Time.deltaTime 不同。所以 smoothing*Time.deltaTime 是一个动态变化的值,但是也要保证  t 的范围在 [0,1] 之间,超过 1 也就没有意义。假设 FPS 稳定, 60 FPS,则 Time.deltaTime 就是一个固定值 0.02f, t 的值也固定就是 0.1,就和案例 1 一样 t 是一个固定值,永远会无限接近 to ,但到达不了 to 。而实际 FPS  会波动,所以 t 就会波动,就会模拟出弹性跟随的效果。

这种效果就通常用于游戏中摄像机的弹性跟随。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199221.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午1:34
下一篇 2026年3月26日 下午1:35


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号