unity 学习MoveTowards、Lerp、Slerp SmoothDamp笔记

再unity 过渡通常会用到这些方法
MoveTowards

public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);

第一个为当前位置第二个是目标位置
第三个是每次移动的最大长度
第一 每次移动maxDistanceDelta米 并不是跑到终点
第二 再update中maxDistanceDelta*Time.deltaTime即可理解为每秒速度
第三 它可以到终点

Lerp

public static Vector3 Lerp(Vector3 a, Vector3 b, float t);

Lerp表示线性插值
它的作用就是按照t计算a和b之间的插值。t的取值范围是[0, 1]。
简单理解就是当t=0, 返回值是a,当t=1,返回值是b。同理,t=0.1时是a到b的10%。t就代表了a到b的百分比。
注意这里分为两种情况
起点固定与不固定
起点固定的话

        if (GUILayout.RepeatButton("Lerp"))
        {
            transform.position = Vector3.Lerp(Vector3.zero, tag, 0.1f);
        }

一直按着按钮
物体只会执行一次
如果想线性运动要使用
首先创建AnimationCurve
public AnimationCurve curve;
在这里插入图片描述
然后
x = Time.deltaTime+x; transform.position = Vector3.Lerp(Vector3.zero, tag, curve.Evaluate(x));

当然
在这里插入图片描述
注意不会超过目标距离

起点不固定

transform.position = Vector3.Lerp(transform.position, new Vector3(0,0,10), 0.1f);

在这里插入图片描述
永远到不了

Slerp
一般多在Quaternion的旋转操作时使用。
转载
在这里插入图片描述

SmoothDamp

   if (GUILayout.RepeatButton("SmoothDamp"))
        {
            //平滑阻尼
            transform.position =
                Vector3.SmoothDamp(transform.position, new Vector3(0, 0, 10), ref currentSpeed, 2);
        }

currentVelocity 当前速度,每次调用时该函数都会修改该值。
smoothTime 大约达到目标所需的时间。较小的值将更快地达到目标。

猜你喜欢

转载自blog.csdn.net/weixin_42116703/article/details/86477711