这是我在Unity中的代码,我一直在尝试查看rb的位置是否等于cameraPos位置,但是它不起作用(什么都没发生)
public Rigidbody2D rb;
Vector2 cameraPos;
void Start ()
{
cameraPos = new Vector2(0f, -3f);
}
if (rb.position == cameraPos)
{
print("Continue");
}
答案 0 :(得分:2)
请注意,两个位置可能永远不会完全相等,尤其是在不使用RigidBody
的情况下使用PlayerController
的情况下,因为移动实际上可能会在帧之间“跳转”。
您当前使用的==
运算符实际上使用了近似值,但浮点值的精度仅为1e-5
(0.00001
)。这可能会引起一些误会,但这仅表示例如(0.99999, 0.99999, 0.99999) == (1,1,1)
。所有其他appart都不匹配。
您应该宁愿使用近似值,例如使用Vector3.Distance检查对象是否小于X米,可以在其中使X现在大于或小于1e-5。在此示例中,如果物体的距离小于10cm,则应该匹配:
public Rigidbody2D rb;
Vector2 cameraPos;
// Set the threshold in meters
public float Threshold = 0.1f;
void Start ()
{
cameraPos = new Vector2(0f, -3f);
}
if (Vector3.Distance(rb.position, cameraPos) <= Threshold)
{
print("Continue");
}
根据您的需要,您可以调整Threshold
使其更宽或更精确。
或者,您也可以使用Collisions / Rigidbody.OnCollisionEnter
来跟踪某些对象是否“足够靠近” /彼此接触。这种方法的优势在于,您不仅可以知道位置是否靠近,而且还可以知道两个对象的相遇速度。