В Unity, когда вы умножаете два кватерниона, он применяет второй кватернион (выраженный в глобальных осях) к первому кватерниону вдоль локальных произведенных осейпосле первого Quaternion
).
Итак, , если вы хотите сделать эквивалент Rotate(q2, Space.Self)
, где q1
- исходный rotation
преобразования, а q3
- преобразовательновый rotation
, вы хотите Quaternion q3 = q1 * q2
.
Что делать, если вы хотите применить q2
к q1
вдоль осей до применения q1
?Что ж, получается, что это эквивалентно применению q1
вдоль локальных осей q2
.
В качестве примера, применение q2
вдоль глобальных осей q1
поворачивает его спину лицом вниз и его вершиной вправо.Учтите, что применение q1
вдоль локальных осей p2
также поворачивает его спину лицом вниз и верхнюю сторону вправо.Они дают одинаковую ориентацию!
Так что же это значит? Если вы хотите применить q2
к q1
вдоль осей до применения q1
, выполните Quaternion q3 = q2 * q1
.
Это эквивалентно выполнению Rotate(q2, Space.World)
где q1
является исходным rotation
преобразования, а q3
является новым rotation
.
В отличие от Rotate
, вы можете использовать этот оператор для поворота объектаотносительно осей своего родителя!Если вы сделаете transform.localRotation = q2 * transform.localRotation
, вы будете вращать объект относительно оси родителя.