再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 大约达到目标所需的时间。较小的值将更快地达到目标。