在Unity中经常会用到物体的旋转,常用的方式一般是使用欧拉角和四元数。
欧拉角:
this.transform.eulerAngles
Demo:
private void OnGUI()
{
if (GUILayout.Button("x 轴旋转"))
{
this.transform.eulerAngles += new Vector3(1, 0, 0);
}
if (GUILayout.Button("y 轴旋转"))
{
this.transform.eulerAngles += new Vector3(0, 1, 0);
}
if (GUILayout.Button("z 轴旋转"))
{
this.transform.eulerAngles += new Vector3(0, 0, 1);
}
}
让物体分别绕x,y,z轴旋转 1 rad。
这里有个问题,当物体绕x轴旋转90度之后,再让y或z轴继续旋转,会发现,物体只能绕
y轴旋转。出现这种现象的原因是死锁了。欧拉角自身无法解决,需要利用四元数解决。
四元数:
this.transform.rotation
使用四元数旋转可以解决万向节死锁问题,代码如下:
private void OnGUI()
{
if (GUILayout.Button("x 轴旋转"))
{
this.transform.rotation *= Quaternion.AngleAxis(1, new Vector3(1, 0, 0));
}
if (GUILayout.Button("y 轴旋转"))
{
this.transform.rotation *= Quaternion.AngleAxis(1, new Vector3(0, 1, 0));
}
if (GUILayout.Button("z 轴旋转"))
{
this.transform.rotation *= Quaternion.AngleAxis(1, new Vector3(0, 0, 1));
}
}
这样可以绕 x, y, z轴做任意旋转了。
文章来源:https://www.toymoban.com/news/detail-545863.html
在开发中比较常用的是Rotate旋转,里面实现也是利用四元数。因此平时开发使用Rotate即可:文章来源地址https://www.toymoban.com/news/detail-545863.html
private void OnGUI()
{
if (GUILayout.Button("x 轴旋转"))
{
this.transform.Rotate(new Vector3(1, 0, 0), 1);
}
if (GUILayout.Button("y 轴旋转"))
{
this.transform.Rotate(new Vector3(0, 1, 0), 1);
}
if (GUILayout.Button("z 轴旋转"))
{
this.transform.Rotate(new Vector3(0, 0, 1), 1);
}
}
到了这里,关于Unity 物体旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!