(1)当一个物体和世界坐标的角度不一样时,想要绕自己本身的方向旋转
乘法顺序决定了绕世界还是自己
绕本地轴进行旋转:transform.rotation = transform.rotation * Quaternion;
绕世界轴进行旋转:transform.rotation = Quaternion * transform.rotation;
(2)四元数 * 四元数
两个旋转量的叠加 相当于旋转
Quaternion r = Quaternion.AngleAxis(20, Vector3.up);
this.transform.rotation = this.transform.rotation * r;
设置一个四元数 以y轴方向旋转20度 我们想让绕本地轴进行旋转 就乘在前面 这样就相当于 在本地轴的基础上绕y轴旋转了20度
(3)四元数 * 向量 (还没用明白)
返回一个新向量 相当于旋转向量
(4)Quaternion.AngleAxis(角度,轴)
注意:轴 Vector3.right是以自己的坐标系右侧 并不是世界坐标系右侧
(5)实现飞机的左右旋转 并自动归位
注意:当归位时 本地角度不能与初始角度相乘 四元数*四元数=叠加角度 假设本地角度为30度 初始角度也为30度 30度叠加30度 无限旋转
但是当旋转时 是可以相乘 因为 本地角度*旋转角度 相当于在本地角度的基础上进行旋转角度
//记录初始角度
Quaternion start;
Quaternion rotU;void Start(){start = this.transform.rotation;}void Update(){float h = Input.GetAxis("Horizontal");//当AD键没有按下的时候 我们就让当前的角度缓慢变为初始角度 实现了归位if (h == 0){this.transform.rotation = Quaternion.Slerp(this.transform.rotation, start, Time.deltaTime);}//当AD键盘按下的时候 我们就判断是左边还是右边else{rotU = h > 0 ? Quaternion.AngleAxis(-20 * Time.deltaTime, Vector3.forward) : Quaternion.AngleAxis(20 * Time.deltaTime, Vector3.forward);//让飞机本地角度 * 旋转角度 就实现了飞机旋转this.transform.rotation = this.transform.rotation * rotU;}}