<1> 根据两个向量计算出旋转量,计算出来的旋转量为从fromDirection旋转到toDirection的旋转量
static Quaternion FromToRotation(Vector3 fromDirection,Vector3 toDirection);
<2>static Quaternion LookRotation(Vector3 forward);
static Quaternion LookRotation(Vector3 forward,Vector3 upwards);
使用指定的向前方向和向上方向来创建四元数
例子:
- Vector3 vr = new Vector3(1,0,0);
- Quaternion q1 = Quaternion.LookRotation(vr);
- Debug.Log(q1);
- Vector3 vforwardp = new Vector3(0,0,1);
- Quaternion q2 = Quaternion.FromToRotation(vforwardp ,vr);
- Debug.Log(q2);
这里面q1和q2的值是相同的,q2的计算过程是计算向前向量(vforwardp )到当前向量vr的旋转量,而这就是LookRotation的计算方式 。
<3>
void SetLookRotation(Vector3 view);
void SetLookRotation(Vector3 view,Vector3 up);
也是根据指定的向前和向上向量创建四元数,本质计算过程和LookRotation一样,只不过LookRotation是Quaternion上的静态函数,而SetLookRotation则是Quaternion的成员函数。
<4>
static Quaternion RotateTowards(Quaternion from,Quaternion to, float maxDegreesDelta);
以maxDegreesDelta作为角度步长计算从from到to之间的旋转量
<5>
static Quaternion AngleAxis(float angle,Vector3 axis);
根据旋转轴和旋转角度算出四元数
<6>Quaternion.eulerAngles
存放四元数对应的三个轴向的欧拉角,分别是绕x轴、y轴、z轴旋转的角度
- Quaternion q3 = new Quaternion();
- q3.eulerAngles = new Vector3(10, 30, 20);
- Quaternion qx3 = Quaternion.AngleAxis(10,Vector3.right);
- Quaternion qy3 = Quaternion.AngleAxis(30,Vector3.up);
- Quaternion qz3 = Quaternion.AngleAxis(20,Vector3.forward);
- Quaternion qxyz3 = qz3*qy3*qx3;