我不知道如何在Unity3D中解决这个问题。
示例:用户a)对对象执行90度顺时针操作 - >物体b)应自动调整其方向,即相对于其当前方向也执行顺时针旋转90度。因此,两个对象都有不同的终端方向。我必须使用四元数。
我尝试了以下事项:
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;
答案 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);