四元数定义:
Quaternion q = new Quaternion(0, 0, 1, 0); //相当于Quaternion(new Vector3(0, 0, 1)sin(180/2), cos(180/2)) 即:绕z轴,旋转180°,的四元数
Quaternion.AngleAxis(90, Vector3.up); //绕y轴旋转90°,的四元数
Quaternion.Euler (new Vector3(90,90,90)); //先绕z轴90°,再绕x轴90°,再绕y轴90°,的四元数
Quaternion LookRotation ( Vector3 forward, Vector3 upwards=Vector3.up )
看向target
Vector3 relativePos = target.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(relativePos);
transform.rotation = rotation;
Quaternion应用;
1、四元数*四元数,得到旋转后的四元数
transform.rotation = Quaternion.AngleAxis(degrees, transform.right) * transform.rotation; //低头
2、四元数*Vector3,得到旋转后的位置Vector3
Vector3 newVector = Quaternion.AngleAxis(90, Vector3.up)* transform.position; 绕y轴旋转后的位置
rotate注意事项:
- 绕坐标系E下的Z轴旋转α,绕坐标系E下的Y轴旋转β,绕坐标系E下的X轴旋转r,即进行一次旋转时不一起旋转当前坐标系;
- 绕坐标系E下的Z轴旋转α,绕坐标系E在绕Z轴旋转α后的新坐标系E'下的Y轴旋转β,绕坐标系E'在绕Y轴旋转β后的新坐标系E''下的X轴旋转r, 即在旋转时,把坐标系一起转动;
等同于单步执行
transform.Rotate(new Vector3(0, Y, 0));
transform.Rotate(new Vector3(X, 0, 0));
transform.Rotate(new Vector3(0, 0, Z));
引用:
http://blog.youkuaiyun.com/candycat1992/article/details/41254799
http://blog.youkuaiyun.com/liulong1567/article/details/46420285