1

当前问题:

我正在使用世界空间四元数偏移将玩家模型的手旋转到玩家的真实手,使用:

private Quaternion GetOffsetFromAvatar(Quaternion a, Quaternion b)
{
     Quaternion _offset = a * Quaternion.Inverse(b);
     return _offset;
}

然后应用它:

public void OffsetTarget(Transform Target, Transform PlayerHand, Transform AvatarBone)
{
     /// OffsetTarget() is to be used to auto align avatar hands to player hands.

     Quaternion _offset = GetOffsetFromAvatar(PlayerHand.rotation, 
     AvatarBone.GetComponentInChildren<AvatarOffsetPoint>().transform.rotation);

Target.rotation = _offset * PlayerHand.rotation;
}

预期的结果应该允许玩家在运行时动态更改他们的模型,并且手与玩家的真实手正确对齐,但是当我测试时,手朝向完全不同的方向。

在此处输入图像描述.

4

1 回答 1

0

解决方案

OffsetTarget()方法中;如果偏移量最终应用于头像,我需要更改最后一行。

从:

...
     Target.rotation = _offset * PlayerHand.rotation;
}

至:

...
     Target.rotation = _offset;
}

比我聪明的人,如果我对这个答案背后的推理有误,请纠正我:

我假设我正在世界空间中进行四元数数学运算,但该PlayerHand.rotation;行的一部分实际上是应用相对于玩家手的数学,而不是使用Quaternion.identity;.

我真的需要停止问一个问题,几分钟后才能回答......

于 2021-12-07T23:20:39.517 回答