Unity3d SetTransform导致运动对象旋转过快

Unity3d SetTransform导致运动对象旋转过快,unity3d,virtual-reality,quaternions,leap-motion,Unity3d,Virtual Reality,Quaternions,Leap Motion,这是基于我最近在这里提出的一个问题: 然而,给出的唯一响应中建议的代码不起作用。我一直在使用“SetTransform”方法,虽然它确实允许我将手移动到所需的位置,但旋转是疯狂的。手不停地旋转,尽管花了四天的大部分时间,我还是找不到解决办法 简言之,我所要做的就是将手设置为固定姿势(例如拳头),但让它随着实时手数据移动和旋转。我创建了一个方法(在上一个问题中有详细说明),该方法将手动重新计算关节的位置,以便在SetTransform导致这种疯狂旋转时将手置于姿势中。然而,由于必须变换手来旋转它

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

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

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

posedHand=PoseManager.LoadHandPose(mhd.LeftHand,int.Parse(“2”),transform);
手h=新手();
if(posedHand!=null)
{
h、 抄袭(posedHand);
h、 SetTransform(LiveData.LeftHand.PalmPosition.ToVector3(),LiveData.LeftHand.Rotation.ToQuaternion());
}
我真正想要的是一种方法,我可以将两个手对象传递到其中(一个是当前的“活动”手,另一个是所需的姿势),然后返回一个手对象,然后我可以渲染它

更新 根据要求,这里有我目前得到的和我想要实现的图像

当前:

目标:


目标图像将显示固定姿势,在本例中,该姿势是在当前位置的拳头和活动手的旋转。这意味着我的手可以“张开”,但在屏幕上我会看到拳头在动。正如您从“当前”中看到的,SetTransform为我提供了正确的姿势和位置,但旋转异常。

这个问题已在其他地方得到解答

本质上,我必须创建一个函数,将姿势手作为参数,然后使用Hands.GetHand(Chiralty)从实时数据中获取位置和旋转,然后使用该数据将姿势手“设置变换”到新的位置和旋转

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;
    }

一些视觉帮助会很好,你能包括你想要实现的目标和当前情况的图像吗?嗨,我已经根据要求添加了图像。有什么可以帮助你的吗,帮帮我吗?我已经很久没有使用Leap了,给你一个主意:If Hand()h源于MonoBehavior,作为一个类,您可以直接操纵它的变换来跟踪您的手掌位置和旋转。如果没有,你可以寻找另一种方法来设置它的位置和旋转。否则,我认为您的问题就是所谓的万向锁。了解代码在代码中的位置非常重要。更新?固定更新?最新消息?在一起?