照我们的理解,两个轴的旋转就可以包含所有的旋转角度了。万向锁,其实就是一种旋转的特殊情况,再y轴旋转为90或-90度的时候,旋转x和z轴的效果是一样的,从而少了一种旋转轴,没有两个轴就不能表达出所有的旋转角度了。
using UnityEngine; public class TestWXS : MonoBehaviour { float x = 0; float z = 0; void Update () { Resetpos(); //x++; z++; transform.Rotate(0, 0, z); transform.Rotate(0, 90, 0); transform.Rotate(x, 0, 0); } private void Resetpos() { transform.position = Vector3.zero; transform.rotation = Quaternion.identity; } }
代码中,无论是x++还是z++都是一样的固定在xy平面上旋转,不同只是方向不一样。缺失了对z轴的旋转。
在变换的矩阵中,y轴旋转变换固定为90或-90,那么矩阵就是一个固定的值,将对x,y,z的旋转矩阵进行左乘,得到:
可以发现,这里缺失了对z顶点坐标旋转的变换影响。