深圳网站域名,做电焊加工的网站,h5自己制作模板,网站流量如何突破Unity中的Lerp插值使用 前言Lerp是什么如何使用Lerp 前言 平时在做项目中插值的使用避免不了#xff0c;之前一直在插值中使用存在误区#xff0c;在这里浅浅记录一下。之前看的博客或者教程还多都存在一个“永远到达不了#xff0c;只能无限接近”的一个概念。可能是之前脑… Unity中的Lerp插值使用 前言Lerp是什么如何使用Lerp 前言 平时在做项目中插值的使用避免不了之前一直在插值中使用存在误区在这里浅浅记录一下。之前看的博客或者教程还多都存在一个“永远到达不了只能无限接近”的一个概念。可能是之前脑子中没有插值的概念没理解对或者当时看的up主也是没理解对程序员难免会有“bug”发现解决完善它就OK了。 一直坚持做一件事很难希望大家都能坚持下去慢慢的成长。
Lerp是什么 首先看官方的定义
public static Vector3 Lerp(Vector3 a, Vector3 b, float t);参数 返回值
a (b - a) * t.描述 两点之间的线性插值。 通过插值器t在点a和b之间进行插值。参数t被限制在[0,1]的范围内。这通常用于在两个端点之间的直线上找到一个点(例如在这些点之间逐渐移动一个物体)。
以上是官方给出的描述那Lerp的中的三个参数a,b,t具体是什么呢 我的理解是a是起始点b是目标点t是一个0到1的进度举一个例子如果a为(0,0,0)b为(10,10,10),那么t为0.5时返回(5,5,5)。就这么简单。开发项目中最常见的就是处理摄像机的移动用到Lerp
void Update()
{transform.position Vector3.Lerp(transform.position, endPosition, Time.deltaTime);
}上述代码的效果就是运行一开始摄像机会快速向endPosition位置移动随着距离接近然后越来越慢。出现这个现象的原因一开始transform.position与endPosition的距离最远所以插值的距离也大视觉上运动很快随着距离慢慢靠近插值的距离也越来越短就会出现先快后慢的效果。这里使用Time.deltaTime就出现了开头说的永远无法到达目标的问题。只会越来接近。
如何使用Lerp 要理解Lerp最重要一点就是使用时要有一个进度的一个概念如上述例子中如果t为0.5则返回的坐标就为(5,5,5),这个0.5就是一个进度。 举例来说明就是上述例子1秒内一个物体从(0,0,0)到(10,10,10) Vector3 startPos Vector3.zero;Vector3 endPos new Vector3(10,10,10);float duration 1f;float curTime 0f;void Update(){float t curTime / duration;transform.position Vector3.Lerp(startPos, endPos, t);curTimeTime.deltaTime;}
上述代码中的t就是进度这样就不会到达不了endPos。
如有错误欢迎指正。