U2L5-3——四元数常用方法

本章代码关键字

1
2
3
4
5
Quaternion.identity        //单位四元数,可以用于初始化方向
Quaternion.LookRotation() //将一个Vector向量,转换为四元数,可以用于改变面朝向
Quaternion.Lerp() //线性插值
Quaternion.Slerp() //球形插值,在角度旋转方面建议用球形插值
Quaternion.LookRotation() //用于让对象朝向传入的向量的方向的方法

单位四元数

用于对象角度初始化

单位四元数表示没有旋转量时(角位移)
当角度为0或者360度时
对于给定轴都会得到单位四元数

[1,(0,0,0)][1,(0,0,0)][1,(0,0,0)][-1,(0,0,0)] 都是四元数,表示没有旋转量

1
2
3
4
print(Quaternion.identity);
testObj.rotation = Quaternion.identity;
//单位四元数可以用于初始化方向
Instantiate(testObj, Vector3.zero, Quaternion.identity); //克隆一个处于世界坐标系原点角度为0,0,0的对象

四元数插值运算

用于平滑旋转

前面讲的插值运算、向量插值计算
四元数也有Lerp​和Slerp​两种方式
四元数里Lerp​和Slerp​只有细微的差别,算法不同
但是在这里更推荐使用Slerp,效果更好
无限接近,先快后慢

1
A.transform.rotation = Quaternion.Slerp(A.transform.rotation, target.rotation, Time.deltaTime);

匀速接近

1
2
time += Time.deltaTime;
B.transform.rotation = Quaternion.Slerp(start, target.rotation, time);

向量指向转四元数

用于让对象朝向某方向

将一个Vector3向量,转换为四元数,可以用于改变面朝向
举例:
当人物面朝向想要改变时,只需要把目标面朝向传入该函数,
便可以得到目标四元数角度信息,
之后将人物四元数角度信息改为得到的信息即可达到转向。

1
2
Quaternion q = Quaternion.LookRotation(lookB.position - lookA.position);    //A指向B的向量
lookA.rotation = q;