使用四元数的Unity3D相对偏移对象旋转

时间:2018-05-19 19:56:50

标签: unity3d rotation quaternions

我不知道如何在Unity3D中解决这个问题。

示例:用户a)对对象执行90度顺时针操作 - >物体b)应自动调整其方向,即相对于其当前方向也执行顺时针旋转90度。因此,两个对象都有不同的终端方向。我必须使用四元数。

实施例: 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;

2 个答案:

答案 0 :(得分:0)

你想要这样的东西:

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

或让B成为A的孩子。

答案 1 :(得分:0)

对于任何试图在任何给定轴上设置静态偏移的人,例如在 z 轴上设置 -90°:

transform.rotation *= Quaternion.Euler(0, 0, -90);