Хранение поворота дочернего элемента относительно его родителя не работает должным образом в Unity3d - PullRequest
0 голосов
/ 02 марта 2019

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

// store relative rotation
var rot = Quaternion.FromToRotation(child.forward, parent.forward);

// get world rotation
var childWorldRot = parent.rotation * rot;

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Просто используйте Transform.localRotation.Это относительно родителя.
Я не уверен, что понимаю, какова ваша конечная цель, но имейте в виду, что Transform.rotation уже находится в мировом пространстве.

// store relative rotation
var rot = child.localRotation;

// get world rotation
var childWorldRot = child.rotation;
0 голосов
/ 03 марта 2019

Возможно, есть лучшее решение, включающее кватернионные преобразования, но это просто и должно сработать:

// store relative directions
var refUp = parent.InverseTransformDirection(child.up);
var refForward = parent.InverseTransformDirection(child.forward);

// get world rotation
var childWorldRot = Quaternion.LookRotation(parent.TransformDirection(refForward), parent.TransformDirection(refUp));
...