【问题标题】:How to get yaw degrees from transform in Unity?如何从 Unity 中的变换中获得偏航度?
【发布时间】:2018-05-28 09:14:56
【问题描述】:

我正在制作一个飞机游戏,我需要获得飞机的偏航。下面是设置俯仰和滚动的工作代码,但我不太清楚偏航。

private void _CalculateRollAndPitchAngles()
{
    // Calculate roll & pitch angles
    // Calculate the flat forward direction (with no y component).
    Vector3 flatForward = transform.forward;
    flatForward.y = 0;
    // If the flat forward vector is non-zero (which would only happen if the plane was pointing exactly straight upwards)
    if (flatForward.sqrMagnitude > 0)
    {
        flatForward.Normalize();
        // calculate current pitch angle
        Vector3 localFlatForward = transform.InverseTransformDirection(flatForward);
        m_pitchDegrees = Mathf.Atan2(localFlatForward.y, localFlatForward.z) * Mathf.Rad2Deg;
        // calculate current roll angle
        Vector3 flatRight = Vector3.Cross(Vector3.up, flatForward);
        Vector3 localFlatRight = transform.InverseTransformDirection(flatRight);
        m_rollDegrees = Mathf.Atan2(localFlatRight.y, localFlatRight.x) * Mathf.Rad2Deg;
    }
}

【问题讨论】:

    标签: unity3d math vector quaternions euler-angles


    【解决方案1】:

    从 cmets 开始,您可以使用 here 中的公式并考虑 Y-Z 交换,将变换矩阵(或其旋转部分)直接转换为欧拉角:

    roll = atan2(M[1][2], M[1][1])
    pitch = atan2(-M[1][0], sqrt(M[0][1] * M[0][1] + M[0][0] * M[0][0]))
    yaw = atan2(M[2][0], M[0][0])
    

    【讨论】:

    • 虽然欧拉角代表空间中的旋转,但它们不适用于随时间推移进行测量。如果您有使用它们的经验,您会很快意识到这一点。
    • @Gullie667 不确定您的意思。但是我重新阅读了您的问题,您似乎不是试图获得 from 欧拉角(滚动俯仰偏航已经是欧拉角表示),而是试图从变换矩阵计算角度。您的措辞令人困惑并且与您的代码相矛盾。
    • 根据您的建议,我将“eulerAngles”更改为标题中的变换。
    • 请原谅我的无知,但是 M?什么是 M[x][x]?如果是这样的: yaw = Mathf.Rad2Deg * Mathf.Atan2(2 * q.y * q.w + 2 * q.x * q.z, 1 - 2 * q.y * q.y - 2 * q.z * q.z);那么当飞机的方向指向接近垂直或垂直向下时,这将不起作用,因为偏航不再准确。
    • @Guillie667 M 是你的变换矩阵;这是欧拉角的内在奇异性,只能通过某种“时间相干性”方法解决,即使用最后一个有效值。引用你的话:如果你有使用它们的经验,你会很快意识到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2015-01-25
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多