首页 > 编程知识 正文

四能级系统速率方程,求生之路lerp是什么

时间:2023-05-03 15:48:57 阅读:38658 作者:2922

Lerp函数位于Mathf、Vector3等类中,但用法相似。 作用是以百分比形式获取从一个值到另一个值的中间值。 以下内容对于各级Lerp函数是共同的。

Lerp的常见“误用”是update ((transform.position=vector3. lerp ) transform.position.x,targetPosition,time.delta time 这个用法可以工作,但往往不是大家的真正需要。 大多数情况下,大家使用Lerp是为了达到等速运动的效果,但以下“误用”会使对象以逐渐降低的速度运动。

首先,上述的“误用”是指,在每帧中重新取得物体的当前位置,计算物体和目标距离的差,根据当前帧的持续时间,移动该比率的位置。 因此,如果目标位置总是固定的话,整体的运动会慢慢运动,先快后慢。 这样的效果乍一看还不错,其实有几个问题。 由于每秒钟以一定的比例接近目标位置,运动速度以一定的比例逐渐降低,只要运算精度足够高,运动就永远达不到目标,运算总是在进行。 如果确实需要这样做,则需要添加阈值,如果与目标的距离小于该阈值,则需要将物体的位置直接设定在目标位置。 请适当设定该阈值的大小。 如果太大,在后面的阶段会感觉到明显的跳跃,如果太小,运算时间就会浪费。

现在说明一下,如果上述效果是我们想达到的目标,那么使用Time.deltaTime作为第三参数在这种情况下是合理的。 由于每帧的时间不同,为了保证每单位时间的运动比例一定,需要在Time.deltTime进行干预。

如果你误撞实现慢动效果,认为有效果而没有想得更深,建议你继续往下看。

用Lerp实现等速运动的代码首先看代码:

浮动速度=2.0f; //从什么时候开始运动浮动开始时间=2.0f; //开始x位置浮动开始=0.0f; //结束x位置浮动结束=0.0f; void更新() floatlerpvalue=mathf.lerp ) startx,endX,) Time.time-startTime ) * speed ); transform.position=new vector3(ler pvalue,0,0 ); )必须理解MATHF.lerp(floata,float b,float t ) )中第三个参数t的含义。 它是一个百分比,最小值的有效值为0,最大值为1,超过1时为1,不足0时为0。

它表示从a到b之间,按照t这个百分比来取值,例如a是0,b是100,如果t是0.2,则该函数返回的值是20,如果t是1,该函数返回的值为100.

匀速运动的要点是起始值和结束值都是固定好的,不会随着运动而发生变化。

Time.time是系统的运行时间,也就是从该程序开始到现在的时间。

(Time.time - startTime ),在上例中,如果startTime为2.0f,则此表达式的可能值最初为- 2,2秒为0,3秒为1。 如果不首先乘以speed,整个运动过程将在2秒开始,在3秒结束。

物体的运动速度是距离差(在本例中为10.0f )除以1秒。 挂了一个speed后,实际上调整了整体的运动时间。

假设speed为0.1f,则运动时间从2秒到12秒结束,运转时间为10时,速度为1/10,

同样,如果speed为10f,则运动时间从2秒到2.1秒结束,速度变为原来的10倍。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。