如何将 transform.eulerAngles 更改为四元数

how to chagne transform.eulerAngles to quaternion

我让相机旋转来观察一个物体

鼠标左键旋转部分

 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, xRotation, 0));
            //4
            //transform.Rotate(-yRotation, xRotation, 0);

            //i use this 
            transform.eulerAngles += new Vector3(-yRotation, xRotation, 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;
    // ...

有关如何使用四元数乘法的更多信息,请参阅