Unity3D使用四元数进行相对偏移物体旋转

4

我不知道如何在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个回答

1
你想要像这样的东西:
ObjectB.transform.position = ObjectA.transform.right * someOffsetX
  + ObjectA.transform.up* someOffsetY
  + ObjectA.transform.forward * someOffsetZ;

或者将B作为A的子元素。

1
谢谢Draco18s。然而,我不想改变物体的位置,我只是想改变它的方向。使用child也不适用于我,因为a)对象并不总是跟随a)对象 -> 它是由事件触发的。 - R.Devel
从你的帖子中理解起来有些困难,但看起来你已经弄清楚了。 - Draco18s no longer trusts SE

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接