在四元数中旋转y?解决问题?

Posted

技术标签:

【中文标题】在四元数中旋转y?解决问题?【英文标题】:Rotate the y in a quaternion? Work arounds? 【发布时间】:2021-12-27 05:38:06 【问题描述】:
float speed = 20.0f;
float rSpeed = 200.0f;

// Start is called before the first frame update
void Start()



// Update is called once per frame
void Update()

    float xValue = Input.GetAxis("Horizontal");
    float zValue = Input.GetAxis("Vertical");
    float yValue = 0;
    Vector3 movementDir = new Vector3(xValue,yValue,zValue);
    movementDir.Normalize();

    transform.Translate(movementDir * speed * Time.deltaTime, Space.World);

    if (movementDir != Vector3.zero)
    
        Quaternion toRotation = Quaternion.LookRotation(movementDir, Vector3.up);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, toRotation, rSpeed * Time.deltaTime);
    

代码应允许移动并沿移动方向转动。它按预期进行,但我的对象需要在当前正在执行的操作之上旋转 90 度。我一直在摆弄一些不同的东西,但似乎无法完全理解。

【问题讨论】:

【参考方案1】:

您可以通过将它们的四元数相乘来将两个旋转相加:

Quaternion combinedRotation = Quaternion.Euler( 0f, 90f, 0f ) * toRotation;

顺序很重要,因此如果结果看起来不正确,请交换 Quaternion.EulertoRotation 的顺序。

【讨论】:

以上是关于在四元数中旋转y?解决问题?的主要内容,如果未能解决你的问题,请参考以下文章

在四元数旋转上应用镜像效果的有效方法?

从四元数中提取偏航

如何将欧拉角转换为四元数并从四元数中得到相同的欧拉角?

两个四元数的区别

从模型矩阵或四元数中找到最终的世界坐标

Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()