【问题标题】:How to properly use Quaternions to deviate x amount from the original rotation?如何正确使用四元数来偏离原始旋转的 x 量?
【发布时间】:2019-08-28 11:53:24
【问题描述】:

我正在发布我的第一款游戏,但在最后的润色中却被四元数卡住了。

我的脚本有一个 GameObject,它的一个子对象包含网格。当汽车漂移时,我试图将网格从静止位置旋转 x 度,当汽车加速或减速时,根据它在 x 轴上有点,但它只是在 y 方向上随机旋转。有什么线索吗?

void RotateMesh()
{
    float xRotation = -90 - thrust * 20;
    float yRotation = -transform.rotation.eulerAngles.y;
    float zRotation = 0 - rightVelocity * 50;
    mesh.rotation = Quaternion.Euler(xRotation, yRotation, zRotation);
}

【问题讨论】:

  • 角度必须以弧度表示。

标签: c# unity3d scripting rotation quaternions


【解决方案1】:

根据documentationQuaternion.Euler 类“返回围绕 z 轴旋转 z 度,围绕 x 轴旋转 x 度,围绕 y 轴旋转 y 度的旋转。”,暗示这实现了z-x-y euler angles.

不幸的是,对于欧拉角,轴不能被视为独立的 - 该操作将创建一个围绕 Z 轴旋转的四元数首先,然后获取结果并使用 X 旋转进行旋转,然后将其结果围绕 Y 轴旋转。不幸的是,Unity 似乎没有实现任何不同类型的欧拉角 - 如果您需要更改顺序,您可能需要尝试以下方法:

mesh.rotation = Quaternion.Euler(0, yRotation, 0) * 
     Quaternion.Euler(xRotation, 0, 0) * Quaternion.Euler(0, 0, zRotation);

由于我没有您的游戏的其余部分,因此我无法测试适用于您的预期用例的精确顺序 - 以上只是如何创建实现不同欧拉角类型的四元数的示例默认。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-13
    • 2019-04-06
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多