我正在尝试使用手掌位置来获取距传感器原点(表面)的手距离,然后将其用于我编写的函数中,该函数比较一组边界内的位置(每个轴一个)以计算重量来自传感器的数据作为飞跃API内置的“置信度”变量非常糟糕 .
问题是每当我转过头时,轴似乎都会改变,这完全是我的范围 . 有没有办法可以中和旋转,使轴保持一致,即Z远离传感器,X左右,Y上下 . 如果我面向前方它完美地工作,因为轴是如此详细,但如果我看起来正确,它就消失了 . :(
我将不胜感激任何帮助 .
FYI - 传入的参数'position'是手掌位置 .
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;
}
1 回答
我通过使用transform.inversetransformpoint并相应地调整我的阈值来解决这个问题