Как получить градусы рыскания от трансформации в Unity? - PullRequest
0 голосов
/ 28 мая 2018

Я делаю игру с самолетом, и мне нужно, чтобы получить полет самолета.Ниже приведен рабочий код для установки высоты тона, но я не могу понять, что такое рыскание.

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;
    }
}

1 Ответ

0 голосов
/ 28 мая 2018

Исходя из комментариев, вы можете преобразовать матрицу преобразования (или ее вращательную часть) непосредственно в углы Эйлера, используя формулы из здесь и учитывая обмен YZ:

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])
...