Unity3d 统一跳跃运动-在VR中手掌位置随头部旋转而变化

Unity3d 统一跳跃运动-在VR中手掌位置随头部旋转而变化,unity3d,rotation,quaternions,leap-motion,Unity3d,Rotation,Quaternions,Leap Motion,我尝试使用手掌位置来获取手与传感器原点(曲面)的距离,然后在我编写的函数中使用该函数,该函数比较一组边界内的位置(每个轴一个),以计算传感器数据的权重,因为leap API中内置的“置信度”变量非常糟糕 问题是,每当我转头时,轴心似乎都在改变,这完全超出了我的射程。是否有一种方法可以抵消旋转,使轴一致,即Z远离传感器,X向左和向右,Y向上和向下。如果我朝前看,它可以完美地工作,因为轴非常详细,但如果我看对了,它就消失了( 我将感谢任何帮助 仅供参考-传入的参数“位置”是手的手掌位置 float

我尝试使用手掌位置来获取手与传感器原点(曲面)的距离,然后在我编写的函数中使用该函数,该函数比较一组边界内的位置(每个轴一个),以计算传感器数据的权重,因为leap API中内置的“置信度”变量非常糟糕

问题是,每当我转头时,轴心似乎都在改变,这完全超出了我的射程。是否有一种方法可以抵消旋转,使轴一致,即Z远离传感器,X向左和向右,Y向上和向下。如果我朝前看,它可以完美地工作,因为轴非常详细,但如果我看对了,它就消失了(

我将感谢任何帮助

仅供参考-传入的参数“位置”是手的手掌位置

 float CalculateSensorWeight(Vector position)
    {
        float HighestX = 1f, LowestX = -1f;
        float HighestY = 1.2f, LowestY = 0.6f;
        float HighestZ = 1f, LowestZ = 0.4f;

        HighestX *= transform.root.lossyScale.x;
        LowestX *= transform.root.lossyScale.x;
        HighestY *= transform.root.lossyScale.x;
        LowestY *= transform.root.lossyScale.x;
        HighestZ *= transform.root.lossyScale.x;
        LowestZ *= transform.root.lossyScale.x;

        Debug.Log(position);

        clampedX = (1f - (-1f)) / (HighestX - LowestX) * (position.ToVector3().x - HighestX) + 1f;
        clampedY = (1f - (-1f)) / (HighestY - LowestY) * (position.ToVector3().y - HighestY) + 1f;
        clampedZ = (1f - (-1f)) / (HighestZ - LowestZ) * (position.ToVector3().z - HighestZ) + 1f;

        totalClamp = clampedX + clampedY + clampedZ;

        //Debug.Log(clampedX + " , " + clampedY + " , " + clampedZ + " = " + totalClamp);

        float weight = (1f - 0f) / (3f - (-3f)) * (totalClamp - 3f) + 1f;
        weight = ((weight-0f)/(1f-0f))*(1f-(-1f))+(-1f);
        weight = 1f - Mathf.Abs(weight);

        //Debug.Log("Weight = " + weight);
        //Round the weight to 2 decimal places for asthetics and ease
        weight = Round(weight, 2);
        return weight;
    }

我通过使用transform.inversetransformpoint解决了这个问题,并相应地调整了阈值