Unity3D относительное смещение объекта вращения с использованием кватернионов - PullRequest
0 голосов
/ 19 мая 2018

Я не знаю, как решить эту проблему в Unity3D.

Пример: пользователь a) выполняет 90-градусную манипуляцию с объектом по часовой стрелке -> объект b) должен автоматически отрегулировать его ориентацию, то есть также выполнить поворот на 100 градусов по часовой стрелке относительно его текущей ориентации .Итак, оба объекта имеют разную конечную ориентацию.Я должен использовать кватернионы.

Пример: enter image description here

Я пробовал следующие вещи:

float step = speed * Time.deltaTime;

transform.rotation = Quaternion.RotateTowards(transform.rotation, quatObjectA, Time.time * speed);

и

transform.rotation = Quaternion.Slerp(ransform.rotation, quatObjectA, Time.time * speed);

-> Объект a) и b) имеют одинаковую конечную ориентацию, а не то, что я хочу (для обоих подходов)

transform.rotation = transform.rotation*quatObjectA;

-> В результате возникают странные и неправильные отстающие движения

Я хочу рассчитать разницу между текущей и целевой ориентацией объекта a) и применить тот же поворот к объекту b) относительно его текущей ориентации.


Решено

Я понял это.Это на самом деле отчасти очевидно.

    Quaternion relativeB = Quaternion.Inverse(ObjectBOld) * ObjectBNew;
    transform.rotation = transform.rotation*relativeB;

1 Ответ

0 голосов
/ 19 мая 2018

Вы хотите что-то вроде этого:

ObjectB.transform.position = ObjectA.transform.right * someOffsetX
  + ObjectA.transform.up* someOffsetY
  + ObjectA.transform.forward * someOffsetZ;

Или сделайте B дочерним для A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...