Unity中的旋转最为常知的是Transform.rotation,但其内部实现是由Quaternion(四元数)进行计算处理,而Inspactor中显示的旋转值是由EulerAngles(欧拉角)处理。
Unity使用四元数对实际的旋转值进行计算和存储,使用欧拉角对基于世界空间坐标的旋转进行描述和显示,而Inspacetor中显示的欧拉角是将物体的四元数值转换为欧拉角进行显示。
欧拉角旋转在Unity中的固定旋转顺序为Z, X, Y,例如要旋转到(1,2,3)旋转过程是(0,0,3)(0,2,3)(1,2,3),由于欧拉角旋转会出现万向节死锁问题,所以即便是通过设置.eulerAngles更新旋转,其实际处理方式还是通过转换为四元数后,经过四元数计算处理,并保存,最后再转化为欧拉角进行显示。使用欧拉角显示的主要原因是欧拉角可以表示>180度的角度值。
欧拉角产生死锁的主要原因是欧拉角值变化时,Y轴的变换时在模型坐标系中变换,其他轴是在世界坐标轴中变换,所有会在某些时刻发生模型坐标系的某个轴与世界坐标系的某个轴发生共面关系,也就是同轴、旋转面平行,这种情况下导致某个轴的自由度消失,也就是失效,无法进行正常的变换,但四元数不存在这个问题,四元数表示的事3D空间下的旋转值。文章来源:https://www.toymoban.com/news/detail-543548.html
图中所示为X轴旋转90度时,模型坐标系的Z轴与世界坐标系的Y轴发生产生共面关系,此时修改Y,Z任一轴向值,旋转均为同一轴向变换文章来源地址https://www.toymoban.com/news/detail-543548.html
到了这里,关于Unity旋转 欧拉角和四元数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!