最近想实现一个方块可以根据按键朝任意方向旋转90度的功能,却意外的发现会发生万向锁的问题,导致无法正常进行旋转.
而当我采用四元数的时候,采用的是用欧拉角进行设置,此时又是发现在进行X轴旋转的时候,有时候会发生意外的反向旋转问题.
想了很久,不知道该怎么解决,最后用了一个另类的方法给解决了.
public Transform target;
void Update()
{
//根据按键旋转预演对象
if (Input.GetKeyDown(KeyCode.W))
target.Rotate(Vector3.left * 90, Space.World);
else if (Input.GetKeyDown(KeyCode.S))
target.Rotate(Vector3.right * 90, Space.World);
else if (Input.GetKeyDown(KeyCode.A))
target.Rotate(Vector3.down * 90, Space.World);
else if (Input.GetKeyDown(KeyCode.D))
target.Rotate(Vector3.up * 90, Space.World);
//朝预演对象的旋转位置进行旋转
transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, 4f);