Как получить изменения в Yaw Angle / Поместить Global eulerAngles в Локальное пространство - PullRequest
0 голосов
/ 29 мая 2018

Я делаю игру в самолете, и мне нужно получить изменение Yaw самолета.

Я пытаюсь сохранить transform.eulerAngles предыдущего кадра и вернуть их обратно в локальное пространство преобразованиятак что я могу зафиксировать изменения.Я пытаюсь transform.InverseTransformXXXXX, но, похоже, это не работает.

private float _GetChangeInYawAngle()
{
    float yaw = transform.InverseTransformDirection(m_lastForwardParented).y;
    yaw = yaw > 180 ? yaw - 360 : yaw;
    m_lastForward = transform.parent.eulerAngles;
    return yaw;
}

Ответы [ 2 ]

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

@ zambari

Посмотрев на ваш ответ, я провел небольшое исследование по преобразованию кватернионов.Проблема с вашим решением состоит в том, что «thisYaw-_lastYaw» не перемещается в локальное пространство, и поэтому ось y может сильно меняться от кадра к кадру, таким образом, вычисленная разница может быть намного больше, чем фактическое изменение.Перемещение уравнения в локальное пространство решает эту проблему, если только не существует очень высокой угловой скорости, которую мне не нужно решать.(На заднем сайте, я думаю, я мог бы также использовать угловую скорость, чтобы найти это, но я отвлекся.)

Вот мое рабочее решение!Спасибо за ввод.

private float _SetChangeInYawAngle()
{
    Quaternion LocalRotation = Quaternion.Inverse(m_lastYawRotation) * transform.rotation;

    float yaw = LocalRotation.eulerAngles.y;

    yaw = yaw > 180 ? yaw - 360 : yaw;

    m_currentAngle -= yaw;

    m_lastYawRotation = transform.rotation;

    return m_currentAngle;
}
0 голосов
/ 29 мая 2018

Нет необходимости использовать InverseTransformDirection,

float _lastYaw;
void Update()
{
  float thisYaw=transform.eulerAngles.y;
  float deltaYaw=thisYaw-_lastYaw;
 _lastYaw=thisYaw;
}

Конечно, вам все равно нужно каким-то образом обрабатывать пересечение 0-360.

Возможно, я неправильно понимаю, что вы пытаетесьдобейтесь здесь, но если вы просто пытаетесь отследить текущее вращение против последнего, разница между eulerAngles и localEulerAngles автоматически обрабатывает преобразование локального пространства

...