照我们的理解,两个轴的旋转就可以包含所有的旋转角度了。万向锁,其实就是一种旋转的特殊情况,再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顶点坐标旋转的变换影响。