U2L4-5——向量插值计算

向量插值计算

Vector3也有为向量插值计算的方法,(插值计算相关概念)

本章代码关键字

1
2
Vector3.Lerp()    //向量线性插值
Vector3.Slerp() //向量球形插值

线性插值

一般用于跟随移动,摄像机跟随等

对两个点进行插值计算,t的取值范围是0~1
公式:result = start + (end - start) * t

1
A.position = Vector3.Lerp(A.position, target.position, Time.deltaTime);

线性插值计算也有两种应用

先快后慢趋近

先快后慢 每帧改变start位置 位置无限接近但不会得到end位置

1
2
3
//result = start + (end - start) * t
//先快后慢 每帧改变start位置 位置无限接近但不会得到end位置
A.position = Vector3.Lerp(A.position, target.position, Time.deltaTime);

匀速接近

匀速 每帧改变时间 当>=1时 得到结果

1
2
3
4
5
6
7
8
9
10
//注意,最终匀速移动 当time>=1时 改变了目标位置后 他会直接瞬移到我们的目标位置
//因此需要判断目标位置是否移动
time += Time.deltaTime;
if (nowTarget != target.position)
{
nowTarget = target.position;
time = 0;
startPos = B.position;
}
B.position = Vector3.Lerp(startPos, nowTarget, time);

球形插值

球形插值的轨迹在一个圆形上,涉及四元数,
用于曲线运动,例如模拟太阳运动弧线等,实际开发时,用的会较少

1
C.position = Vector3.Slerp(Vector3.right * 10, Vector3.forward * 10, time * 0.1f);

线性和球形插值的区别

线性插值的轨迹是直线,球形插值的轨迹是圆弧形轨迹

image