Unity中的Lerp插值的使用

Unity中的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);
        curTime+=Time.deltaTime;
    }

上述代码中的t就是进度,这样就不会到达不了endPos

如有错误,欢迎指正。

相关推荐

  1. Unreal Engine 方法示例

    2024-02-20 19:26:01       26 阅读
  2. Unity Best Http基本使用

    2024-02-20 19:26:01       27 阅读
  3. Scala字符串

    2024-02-20 19:26:01       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-20 19:26:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-20 19:26:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-20 19:26:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-20 19:26:01       20 阅读

热门阅读

  1. 5G网络eMBB、uRLLC、mMTC

    2024-02-20 19:26:01       29 阅读
  2. android PopWindow弹不出输入法的问题

    2024-02-20 19:26:01       30 阅读
  3. 【嵌入式——QT】QT核心

    2024-02-20 19:26:01       27 阅读
  4. 华纳云:docker更新容器镜像的常用方法

    2024-02-20 19:26:01       24 阅读
  5. Sql Server 视图

    2024-02-20 19:26:01       32 阅读
  6. K8s Deployment挂载ConfigMap权限设置

    2024-02-20 19:26:01       39 阅读
  7. 练习:鼠标类设计之2_类和接口

    2024-02-20 19:26:01       31 阅读
  8. 基于python+django+vue.js开发的健身房管理系统

    2024-02-20 19:26:01       24 阅读
  9. 某movie搜索接口

    2024-02-20 19:26:01       28 阅读
  10. 深入理解C语言中的联合体(union)

    2024-02-20 19:26:01       22 阅读