SetTransform导致Unity LeapMotion对象旋转过快

SetTransform causes Unity LeapMotion object to spin too fast

这是基于我最近在这里提出的一个问题:

但是,唯一给出的回复中建议的代码不起作用。我一直在使用 'SetTransform' 方法,虽然它确实允许我将手移动到我想要的位置,但旋转太疯狂了。手不停地转,尽管花了四天的大部分时间,我还是找不到解决办法。

简而言之,我正在尝试将手设置为固定姿势(例如拳头),但让它随着实时手部数据移动和旋转。我创建了一个方法(在上一个问题中有详细说明),该方法将手动重新计算关节的位置以将手置于姿势中,因为 SetTransform 导致了这种疯狂的旋转。但是,我仍然因为不得不变换手来旋转它而疯狂旋转,所以为了方便,我切换回了 SetTransform 方法。

posedHand = PoseManager.LoadHandPose(mhd.LeftHand, int.Parse("2"), transform);
Hand h = new Hand();
if(posedHand != null)
{
    h.CopyFrom(posedHand);                               
    h.SetTransform(LiveData.LeftHand.PalmPosition.ToVector3(), LiveData.LeftHand.Rotation.ToQuaternion());
}

我真正想要的是一种方法,我可以将两个手对象传入(一个是当前 'live' 手,另一个是所需姿势)并返回一个手对象,然后我可以渲染.

更新

这里是我目前得到的和我想要实现的目标的图片。

当前:

目标:

目标图像将显示固定姿势,在本例中是在当前位置和真手旋转的拳头。这意味着我可以握住我的手 'open' 但在屏幕上我会看到一个拳头在四处移动。正如您从 'current' 中看到的那样,SetTransform 为我提供了正确的姿势和位置,但旋转异常。

这个问题已经在别处回答了。

本质上,我必须创建一个函数,将姿势手作为参数,然后使用 Hands.GetHand(手性)从实时数据中获取位置和旋转,然后用于 'SetTransform' 摆姿势的手到新位置和旋转

public static Hand TransformHandToLivePosition(Chirality handType, Hand poseHand)
    {
        Hand sourceHand = Hands.Get(handType);
        Hand mimicHand = null;

        if (poseHand == null && sourceHand != null && sourceHand.Fingers.Count > 0)
        {
            //poseHand = PoseManager.LoadHandPose(sourceHand, 2, this.transform, true);
        }

        if (poseHand != null && sourceHand != null)
        {
            // Copy data from the tracked hand into the mimic hand.
            if (mimicHand == null) { mimicHand = new Hand(); }

            mimicHand.CopyFrom(poseHand); //copy the stored pose in the mimic hand
            mimicHand.Arm.CopyFrom(poseHand.Arm); // copy the stored pose's arm into the mimic hand

            // Use the rotation from the live data
            var handRotation = sourceHand.Rotation.ToQuaternion();

            // Transform the copied hand so that it's centered on the current hands position and matches it's rotation.
            mimicHand.SetTransform(sourceHand.PalmPosition.ToVector3(), handRotation);
        }
        return mimicHand;
    }