Unity3d SetTransform导致运动对象旋转过快
这是基于我最近在这里提出的一个问题: 然而,给出的唯一响应中建议的代码不起作用。我一直在使用“SetTransform”方法,虽然它确实允许我将手移动到所需的位置,但旋转是疯狂的。手不停地旋转,尽管花了四天的大部分时间,我还是找不到解决办法 简言之,我所要做的就是将手设置为固定姿势(例如拳头),但让它随着实时手数据移动和旋转。我创建了一个方法(在上一个问题中有详细说明),该方法将手动重新计算关节的位置,以便在SetTransform导致这种疯狂旋转时将手置于姿势中。然而,由于必须变换手来旋转它,我仍然以疯狂的旋转结束,因此为了方便起见,我已切换回SetTransform方法Unity3d SetTransform导致运动对象旋转过快,unity3d,virtual-reality,quaternions,leap-motion,Unity3d,Virtual Reality,Quaternions,Leap Motion,这是基于我最近在这里提出的一个问题: 然而,给出的唯一响应中建议的代码不起作用。我一直在使用“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,作为一个类,您可以直接操纵它的变换来跟踪您的手掌位置和旋转。如果没有,你可以寻找另一种方法来设置它的位置和旋转。否则,我认为您的问题就是所谓的万向锁。了解代码在代码中的位置非常重要。更新?固定更新?最新消息?在一起?