如何将chagne transform.euler角度转换为四元数

问题描述

我使相机旋转以观察物体

正在旋转鼠标左键

 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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...