Как правильно использовать кватернионы, чтобы отклонить количество х от исходного вращения? - PullRequest
0 голосов
/ 07 апреля 2019

Я собираюсь выпустить свою первую игру, и на последних штрихах застрял с кватернионами.

У меня есть 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);
}

1 Ответ

0 голосов
/ 16 апреля 2019

Согласно документации , класс Quaternion.Euler «Возвращает вращение, которое поворачивает на z градусов вокруг оси z, на x градусов вокруг оси x и y градусов вокруг оси y», предлагаячто это реализует углы zxy-эйлера .

К сожалению, с углами Эйлера оси не могут рассматриваться как независимые - операция создаст кватернион, который сначала вращается вокруг оси Z , затем берет результат и поворачивает его, используя вращение X, а затем результат поворачивает вокруг оси Y.К сожалению, Unity, похоже, не реализует какой-либо другой тип углов Эйлера - если вам нужно изменить порядок, вы можете поэкспериментировать с чем-то вроде:

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

Поскольку у меня нет остальныхв вашей игре я не могу проверить точный порядок, который подходит для вашего предполагаемого варианта использования - приведенное выше является лишь примером того, как создать кватернион, реализующий тип углов эйлера, отличный от значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...