Это
Quaternion q = new Quaternion(x, y, z, w);
transform.Rotate(q.eulerAngles);
не очень хорошая идея.Хотя направление от Euler
до Quaternion
всегда работает в Quaternion.Euler
, обратное направление от Quaternion
до Euler
с использованием q.eulerAngles
не всегда возвращает одно и то же значение, поскольку Quaternion
может иметь несколько(может быть, бесконечное число?) представлений в Euler
!
Так что, если у вас уже есть Quaternion
(при условии, что ваши значения x
, y
, z
, w
верны) don 't использовать любое Euler
.
Вы умножаете два поворота умножением
quaternionA * quaternionB
(осторожно отличается от, например, умножения с плавающей точкой, это умножение матрицы, и поэтому порядок имеет значение!)
Итак, если вы хотите добавить , используйте вращение
transform.rotation *= q;
, если вы хотите установите , вращение просто используйте
transform.rotation = q;