问题描述
我使相机旋转以观察物体
正在旋转鼠标左键
if (Input.GetMouseButton(0))
{
xMovement = Input.GetAxis("Mouse X");
yMovement = Input.GetAxis("Mouse Y");
//1
//Quaternion qurEuler = Quaternion.Euler
// (new Vector3(-yRotation,xRotation,0));
//Quaternion quaternion = transform.rotation;
//
//2
//transform.rotation = (quaternion * qurEuler);
//3
// transform.rotation *= Quaternion.AngleAxis(1,new Vector3(-yRotation,0));
//4
//transform.Rotate(-yRotation,0);
//i use this
transform.eulerAngles += new Vector3(-yRotation,0);
}
但是这种方式具有万向节锁定。 1,2,3,4方式不舒服
旋转对象后,无法尝试将其还原为原始旋转。 transform.eulerAngles + = new Vector3(-yRotation,xRotation,0)可以恢复旋转 我想知道什么四分之一像素正在使用与transform.eulerAngles
相同的方法解决方法
如果您要使用四元数来执行与transform.eulerAngles += new Vector3(-yRotation,xRotation,0);
方法相同的操作,则必须在全局轴上应用Y轴旋转,然后在局部轴上应用X轴旋转:
if (Input.GetMouseButton(0))
{
xMovement = Input.GetAxis("Mouse X");
yMovement = Input.GetAxis("Mouse Y");
Quaternion yRot = Quaternion.Euler(0f,xMovement,0f);
Quaternion xRot = Quaternion.Euler(-yMovement,0f,0f);
transform.rotation = yRot * transform.rotation * xRot;
// ...
有关如何使用四元数乘法的更多信息,请参见this question。