2015-04-29 2 views
1

У меня есть два примера объекты в Unity структурирован следующим образом:Получение разницы между двумя зеркальными вращениями в Unity

EmptyGameObject1: scale(-1, 1, 1) 
- Child1: rotation(-4, 167, 179) 

EmptyGameObject2: scale(1, -1, -1) 
- Child2: rotation(-1, -10, 0) 

Теперь я хочу, чтобы получить разницу между углами Эйлера Чайлдс, учитывая масштаб его родителя , Vector3.Distance возвращает довольно высокое значение, но я вижу, что вращение дочерних элементов очень похоже на вид сцены.

Я знаю, что отрицательный масштаб родительского зеркала отражает дочерний объект - но что он математически делает для вращения?

Как вычислить эту разность вращения в единицах для x, y и z?

ответ

0

Предположим, что var rotation1 = Child1.transform.rotation; и var rotation2 = Child2.transform.rotation; (мы работаем в мировом пространстве, верно?). Мы хотим найти поворот (назовем его difference) от Child1 до Child2 таким образом, чтобы rotation1 * difference == rotation2. Это означает, что мы можем найти его просто путем вычисления var difference = rotation2 * Quaternion.Inverse(rotation1);. Теперь, когда мы знаем поворот, мы можем просто получить доступ к свойству углов Эйлера, чтобы определить углы x, y и z: difference.eulerAngles.x и так далее.

+0

работает отлично, спасибо! – Andrea

+0

Рад помочь. Кватернионы могут сбивать с толку, если вы пытаетесь использовать их значения компонентов, но работать с кватернионом на кватернионных операциях может быть намного проще. Вместо этого всегда возникает соблазн использовать углы Эйлера, потому что они кажутся гораздо более интуитивными, но во множестве крайних случаев углы Эйлера ломаются, а кватернионы прекрасно работают. –

Смежные вопросы