трансформ относительно "ребёнка"

Программирование на Юнити.

трансформ относительно "ребёнка"

Сообщение Xtir 23 сен 2017, 17:44

Всем привет! У меня есть объект с "ребёнком". Мне нужно этого "ребёнка" поместить на определённую позицию и повернуть на определённый угол. Так вот, каким образом мне передвинуть родителя, что бы "ребёнок" оказался в нужных мне координатах?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: трансформ относительно "ребёнка"

Сообщение Susanin 23 сен 2017, 18:22

Простейший вариант:
временно поменять местами родителя и ребенка.
Susanin
UNIт
 
Сообщения: 120
Зарегистрирован: 11 дек 2015, 10:52

Re: трансформ относительно "ребёнка"

Сообщение samana 23 сен 2017, 18:40

Просто считаете направление и расстояние от ребёнка до нужной новой позиции, но перемещаете родителя, а не ребёнка. Хотя с поворотом это не сработает. В общем ответ мой не корректный.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: трансформ относительно "ребёнка"

Сообщение Shekn 24 сен 2017, 08:32

Надо использовать задание трансформов объектов с помощью матриц. Хорошо известно, что трансформы задаются матрицами 4x4 специального вида. Предположим у нас есть родитель P с матрицей трансформов T_P, и его потомок C с матрицей трансформов T_C. Матрица T_C должна отражать локальную трансформацию объекта C относительно P (ведь у каждого объекта есть два трансформа - локальный и глобальный. Здесь нужен именно локальный). Перевод из локальных трансформов в глобальные состоит просто в перемножении матриц T_P и T_C. Теперь, если известны глобальные трансформы конечной точки (пусть это будет матрица A), то есть где должен быть C, то значит надо найти такую матрицу T_P', что T_P' * T_C = A. Дальше ответ очевиден.

Единственное, что здесь надо попробовать разные случаи, чтобы понять в каком именно виде трансформы задаются матрицами. В частности, чтобы понять, в каком порядке их надо умножать, может быть в каких-то случаях не на саму матрицу а на транспонированную, к примеру, или вообще обратную. Но это вряд ли, скорее всего только порядок умножения надо понять.
https://tugcga.github.io/
Аватара пользователя
Shekn
UNIт
 
Сообщения: 95
Зарегистрирован: 05 фев 2016, 14:20

Re: трансформ относительно "ребёнка"

Сообщение Bill Gates 28 сен 2017, 08:02

parent.rotation = parent.rotation * (child.localRotation * Quaternion.Euler (0f, 30f, 0f));
parent.position = target.position + (parent.position - child.position);
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 3